在c++中,如何将数组大小和整数数组值之间的分隔符取为-0



如何在c++中将数组大小和整数数组值之间的分隔符取为-0。

for example: 2 -0 1,2 -0
array-size '-0' 1st array values separated by "," '-0'

如果我使用get line在字符串中输入,那么如何从字符串中分离大小并获取数组的输入。

int main(){
string s,t;
getline(cin,s);
stringstream x(s);
while(getline(x,t,"-0")){
cout << t;
}

}

我不能从谷歌上正确理解分隔符的概念,你能解释一下吗;数组大小"-0"由","-0"分隔的第一个数组值;form。

给定输入,最简单的方法是将字符串标记检查为-0分隔符。

#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::getline;
using std::string;
using std::stringstream;
int main(){
string s,t;
getline(cin, s);
stringstream x(s);
char const* sep = "";
while (x >> t) {
if (t == "-0") {
cout << sep << "<DELIMITER>";
} else {
cout << sep << t;
}
sep = " ";
}
cout << "n";
}

这就给出了:

echo '2 -0 1,2 -0' | ./a.out
2 <DELIMITER> 1,2 <DELIMITER>

更新

将这些值存储到std::vector<int>

#include <cstddef>
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::getline;
using std::ostream;
using std::runtime_error;
using std::size_t;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;
static auto MakeVecInt(string line) -> vector<int> {
auto result = vector<int>();
auto ss = stringstream(line);
auto value = string{};
while(getline(ss, value, ',')) {
result.push_back(stoi(value));
}
return result;
}
static auto operator<<(ostream& out, vector<int> const& v) -> ostream& {
char const* sep = "";
for (auto i : v) {
out << sep << i;
sep = " ";
}
return out;
}
int main() {
auto line = string{};
getline(cin, line);
auto ss = stringstream(line);
auto count = size_t{};
auto delimiter1 = string{};
auto values = string{};
auto delimiter2 = string{};
if (!(ss >> count >> delimiter1 >> values >> delimiter2))
throw runtime_error("bad input");
if (delimiter1 != "-0" || delimiter2 != "-0")
throw runtime_error("bad input");
auto vec = MakeVecInt(values);
if (count != vec.size())
throw runtime_error("bad input");
cout << vec << "n";
}

更新

注意上述代码中的vector<int>输出例程:

static auto operator<<(ostream& out, vector<int> const& v) -> ostream&

它输出向量中的每个元素,每个元素之间有一个空格。它不会在第一个元素之前输出空格。

最新更新