字符串流分析逗号分隔的整数
Stringstream parse comma-separated integers
伙计们, 实际上我想在这里做的是,当我输入 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()
函数时,它都是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;
}
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
另请参阅: getline, stoi
相关文章:
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 分隔整数 (C++) 的数字
- 从 stdio 获取一行空格分隔的整数,而不知道它们是多少 (C++)
- 从文件中读取后,将分号分隔的整数存储到数组中
- 获取由空格分隔的未知大小的单行输入,并将其存储到整数数组中
- 如何将输入重定向与特殊整数作为分隔线和直至EOF
- 字符串流分析逗号分隔的整数
- 将字节数组转换为逗号分隔的整数字符串
- 我如何使用CIN输入整数,每个数字都被逗号分隔
- 使用 cin 读取逗号分隔的整数对 (x,y) 和任意空格
- C++输出逗号分隔的整数的程序
- 如何读取用户输入的逗号分隔整数
- 正在分析逗号分隔字符串中的整数
- 不能在一行中输入 (cin) 超过 10 个整数,以空格分隔到数组中
- 如何在C++中拆分字符串,其中包含两个由":"分隔的整数?
- 读取空格将数字从文本文件分隔到整数数组 (C++)
- 如何读入和分隔分隔整数,例如"100_4_1 - 15"
- 空格分隔整数的验证
- c++分隔整数