问题描述
如何在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;
}
}
我无法正确地从Google理解定界符概念,您能否解释一下并接受以下格式的输入:“ array-size'-0'第一数组值,以',''-0'“形式分隔。
解决方法
给出输入,最简单的方法是检查字符串标记是否为-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&
它输出向量中的每个元素,每个元素之间都有一个空格。它不会在第一个元素之前输出空格。