当我使用 getline
时,我会输入一堆字符串或数字,但如果它不是数字,我只希望 while 循环输出“单词”。那么有没有办法检查“单词”是否是一个数字?我知道我可以将 atoi()
用于 C 字符串,但是对于字符串类的字符串呢?
int main () {
stringstream ss (stringstream::in | stringstream::out);
string word;
string str;
getline(cin,str);
ss<<str;
while(ss>>word)
{
//if( )
cout<<word<<endl;
}
}
原文由 user342231 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一个版本…
使用
strtol
,将其包装在一个简单的函数中以隐藏其复杂性:为什么
strtol
?就我喜欢 C++ 而言,有时 C API 是我所关心的最佳答案:
它是如何工作的 ?
strtol
乍一看似乎很原始,因此解释将使代码更易于阅读:strtol
将解析字符串,在第一个不能被视为整数一部分的字符处停止。如果您提供p
(就像我在上面所做的那样),它会在第一个非整数字符处设置p
。我的推理是,如果
p
没有设置到字符串的末尾(0字符),那么字符串中有一个非整数字符s
,意思是s
不是正确的整数。第一个测试是为了消除极端情况(前导空格、空字符串等)。
当然,此功能应该根据您的需要进行定制(前导空格是错误的吗?等等)。
资料来源:
参见
strtol
的描述: http ://en.cppreference.com/w/cpp/string/byte/strtol。另请参见
strtol
的姊妹函数的描述(strtod
,strtoul
等)。