gpt4 book ai didi

c++ - Stringstream 解析逗号分隔的整数

转载 作者:行者123 更新时间:2023-11-30 05:05:10 25 4
gpt4 key购买 nike

伙计们,实际上我想在这里做的是,当我输入 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;
}

最佳答案

在您的最后一个数字上,while 循环失败,因为末尾没有字符。只是字符串的结尾。所以它不会在循环内执行 push_back。

更改它以便 while 循环只获取数字。然后在循环中执行 push_back。然后在循环中,推送之后,获取逗号字符。不要费心检查获取逗号的失败,因为当它再次绕过 while 循环时,它将失败并退出。

我更改为在您的main 中使用getline。我将你的循环索引更改为 size_t 因为混合有符号和无符号整数从来都不是一个好主意,而且每当你使用 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;
}

关于c++ - Stringstream 解析逗号分隔的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48528893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com