所以伙计们,其实我想在这里做的是当我输入3,12,36时输出将是:
3
12个
36
但是我在如何输出所有答案方面遇到了困难。我一直在做的是当你输入3,12,36时它只会输出3 12,如果输入3,12,36,48,它将输出3 12 36.
所以它总会错过最后一个整数,因为我的while循环不正确。但如果我把它改成
while(output >> life|| output >> ch)
它也不起作用。我做了很多研究,但它仍让我感到困惑,我仍然坚持这一部分。
vector<int> parseInts(string str) {//23,4,56
vector<int>lifeishard;
stringstream output;
string lifeisgood = str;
output.str(lifeisgood);
int life;
char ch;
while(output >> life >> ch){
lifeishard.push_back(life);
//lifeishard.push_back(life2);
//lifeishard.push_back(life3);
}
return lifeishard;
}
int main() {
string str;
cin >> str;
vector<int> integers = parseInts(str);
for(int i = 0; i < integers.size(); i++) {
cout << integers[i] << "\n";
}
return 0;
}
答案 0 :(得分:1)
在你的最后一个号码上,while循环失败,因为最后没有字符。只是字符串的结尾。所以它不会在循环内执行push_back。
更改它以便while循环只获取数字。然后在循环中执行push_back。然后在循环中,在推送之后,获取逗号字符。不要检查获取逗号的失败,因为当它再次绕过while循环时它会失败并退出。
我更改为使用getline
中的main
。我将循环索引更改为size_t
,因为混合有符号和无符号整数绝不是一个好主意,每当您使用size()
函数时,它都是size_t
。在发布你的程序时,它应该包含所有内容。我修复了你的程序版本:
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
vector<int> parseInts(string str) {//23,4,56
vector<int>lifeishard;
stringstream output;
string lifeisgood = str;
output.str(lifeisgood);
int life;
char ch;
while(output >> life){
lifeishard.push_back(life);
output >> ch;
}
return lifeishard;
}
int main() {
string str;
getline(cin, str);
vector<int> integers = parseInts(str);
for(size_t i = 0; i < integers.size(); i++) {
cout << integers[i] << "\n";
}
// Here is how we do for loops over containers in modern C++
for(auto x: integers) {
cout << x << '\n';
}
return 0;
}
答案 1 :(得分:0)
stringstream
、getline
与分隔符和 stoi
的组合足以进行转换:
来自带有分隔符的 getline 的 C++ 参考:
<块引用>从 is 中提取字符并将它们存储到 str 中,直到找到分隔符 delim 为止。
考虑到这一点,下面的代码示例假设输入格式正确:
示例
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
vector<int> parseInts(const string& str, const char delim = ',')
{
vector<int> parsed;
stringstream ss(str);
string s;
while (getline(ss, s, delim)) // <- stores input in s upon hitting delimiter
parsed.push_back(stoi(s)); // <-- convert string to int and add it to parsed
return parsed;
}
int main()
{
string str = "3,12,36"; // <-- change to cin if you'd like
vector<int> ints = parseInts(str);
for (auto& i : ints)
cout << i << "\n";
}
输出
3
12
36