如何从字符串C ++中读取多个整数

问题描述 投票:0回答:1

我试图了解如何从一个字符串转换多个整数。我试图使用atoi(),stoi()和istringstream(),它们都做同样的事情。我不能超过一个整数。

例如,如果字符串是“ 250磅巧克力和牛奶和2盎司或1.5枚硬币”。以上所有功能均无效。它不会占用整个字符串。如果我只留下一个数字,那么它将起作用。我希望能够读取整个字符串并仅获取所有整数(不是浮点数)。

尽管,如果我只能返回字符串中整数的总数,那会更好。无论哪种方式,我都试图学习两种方式。在这种情况下,输出将为“ 2”,因为只有两个整数。

c++ string integer atoi istringstream
1个回答
0
投票

一种方法是使用分隔符分割字符串,并在单个字符串上使用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等检查所有字符是否都是数字。

© www.soinside.com 2019 - 2024. All rights reserved.