正在分析逗号分隔字符串中的整数
Parsing integer from comma delimited string
我是c++的新手,正试图找到一些从逗号分隔的字符串中提取整数的示例代码。我遇到了这个代码:
std::string str = "1,2,3,4,5,6";
std::vector<int> vect;
std::stringstream ss(str);
int i;
while (ss >> i)
{
vect.push_back(i);
if (ss.peek() == ',')
ss.ignore();
}
我很难理解while循环条件语句:ss >> i
。据我所知,istream::>>
返回操作的istream。操作可能会设置错误位。似乎没有涉及布尔变量。ss >> i
如何作为条件语句?
此外,>>
是否提取一个或多个字符?例如,如果我有一个字符串"13,14"。此操作返回整数1、3、1、4还是整数13、14?
非常感谢,M
1)条件语句。
std::stringstream派生自std::ios,后者定义了:
- 在C++98/C++03中:运算符void*()const
描述:如果设置了故障位或坏位中的至少一个,则为空指针。其他一些值。
- 在C++11中:显式运算符布尔()常量
描述:如果未设置故障位或坏位,则为true。否则为false。
这就是为什么您可以使用此表达式作为循环的条件-运算符>>返回对字符串流对象的引用,然后根据支持的C++版本将其转换为void*指针或bool。
有关此的更多信息:std::ios::operator bool
2) 运算符>>应用于数字提取尽可能多的字符:
int main()
{
std::string str = "111,12,1063,134,10005,1226";
std::vector<int> vect;
std::stringstream ss(str);
int i;
while (ss >> i)
{
vect.push_back(i);
if (ss.peek() == ',')
ss.ignore();
}
return 0;
}
载体含量:[111,12,1063,134,10005,1226]。
同样,更多信息:std::istream::operator>>
ss >> i
如何作为条件语句?
类std::basic_ios
(它是所有标准流的基类)具有返回!fail()
的explicit operator bool()
。它的目的是指示流处于有效状态,并且可以进一步使用。
此外,
>>
是否提取一个或多个字符?
取决于您读取的对象的类型。对于数字,它基本上可以提取尽可能多的字符。你可以在这里详细阅读规则。
你的第二个问题的答案在下面的链接中,上面写着"从流中按顺序提取和解析字符,将它们解释为正确类型的值的表示,该值存储为val的值。"因此,在这种情况下,它将提取尽可能多的字符,将其转换为整数。
[1]http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
- C 字符串返回字符串的整数/双精度/长整型值
- 尝试将字符串/字符转换为整数会产生意外结果
- 从字符串中提取整数并形成一个数组
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 如何从C++中的格式化字符串派生整数?
- 如何使用C++将字符串中的字符转换为整数变量
- 向量值(字符串和整数)求和C++
- 如何从字符串C++读取多个整数
- 如何将整数字符串转换为整数的二维向量?
- 输入验证以筛选出字符、字符串和一系列整数
- 有没有办法在C++中将字符串和整数相乘?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- C++字符串大小减去整数不是预期值,为什么?
- 使用字符串流读取整数并将它们相加
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- C++ runtime_exception字符串 + 整数
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- 使用next_permutation函数后如何保存字符串/整数
- 使用fstream和sstream一起从文件中分离字符串/整数