我试图了解如何从一个字符串转换多个整数。我试图使用atoi(),stoi()和istringstream(),它们都做同样的事情。我不能超过一个整数。
例如,如果字符串是“ 250磅巧克力和牛奶和2盎司或1.5枚硬币”。以上所有功能均无效。它不会占用整个字符串。如果我只留下一个数字,那么它将起作用。我希望能够读取整个字符串并仅获取所有整数(不是浮点数)。
尽管,如果我只能返回字符串中整数的总数,那会更好。无论哪种方式,我都试图学习两种方式。在这种情况下,输出将为“ 2”,因为只有两个整数。
一种方法是使用分隔符分割字符串,并在单个字符串上使用stoi
来检查它们是否为整数。
#include <iostream>
#include <sstream>
#include <string>
int main(){
std::string s = "Chocolate and Milk 250 pounds and 2 oz or 1.5 coins.";
int count = 0;
std::istringstream iss(s);
std::string token;
while(getline(iss,token,' ')){
try{
if(stoi(token) && token.find('.')==std::string::npos){
count++;
}
}
catch(...){ //invalid_argument and out_of_range exceptions from stoi
}
}
std::cout<<count<<std::endl;
}
请注意,如果stoi
成功,则可以对字符串执行更复杂的检查,但是输入不是有效的整数。您可以具有一个辅助功能,该功能可以通过使用isdigit
等检查所有字符是否都是数字。