Stringstream C++ while 循环
Stringstream c++ while loop
程序找到逗号之间的整数,例如“2,33,5”-> 2 33 5。
问题是,如果我输入例如“0,12,4”之类的字符串,为什么它会起作用。
stringstream 不应该将 0 放入 tmp 以便循环在开始时就像 while(0) 吗?
vector<int> parseInts(string str) {
stringstream ss(str); //getting string
vector<int> result;
char ch;
int tmp;
while(ss >> tmp) { //while(IS IT INTEGER ALREADY OR NOT?)
result.push_back(tmp);
ss >> ch;
}
return result;
shouldn't the stringstream put 0 into tmp so the loop was like while(0) at the beginning?
while 条件为ss >> tmp
。如果您查看 cin
的文档,您会发现 operator>>()
return 是 istream&
。它 而不是 return 您刚刚读取的输入,在本例中是 int
值 0
.
此外,istream
(或其基类之一)重载operator bool()
,允许istream
对象隐式转换为bool
,作为 while
语句条件的结果所需的类型。每当调用 operator>>()
期间发生错误时,istream
对象将评估为 false
。如果没有错误,则计算结果为 true
.
由于输入 0
是有效的 int
,while
循环继续下一次迭代。
程序找到逗号之间的整数,例如“2,33,5”-> 2 33 5。 问题是,如果我输入例如“0,12,4”之类的字符串,为什么它会起作用。 stringstream 不应该将 0 放入 tmp 以便循环在开始时就像 while(0) 吗?
vector<int> parseInts(string str) {
stringstream ss(str); //getting string
vector<int> result;
char ch;
int tmp;
while(ss >> tmp) { //while(IS IT INTEGER ALREADY OR NOT?)
result.push_back(tmp);
ss >> ch;
}
return result;
shouldn't the stringstream put 0 into tmp so the loop was like while(0) at the beginning?
while 条件为ss >> tmp
。如果您查看 cin
的文档,您会发现 operator>>()
return 是 istream&
。它 而不是 return 您刚刚读取的输入,在本例中是 int
值 0
.
此外,istream
(或其基类之一)重载operator bool()
,允许istream
对象隐式转换为bool
,作为 while
语句条件的结果所需的类型。每当调用 operator>>()
期间发生错误时,istream
对象将评估为 false
。如果没有错误,则计算结果为 true
.
由于输入 0
是有效的 int
,while
循环继续下一次迭代。