Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从字符串C++;_C++_String_Integer_Atoi_Istringstream - Fatal编程技术网

C++ 如何从字符串C++;

C++ 如何从字符串C++;,c++,string,integer,atoi,istringstream,C++,String,Integer,Atoi,Istringstream,我试图理解如何从字符串中转换多个整数。我试过使用atoi(),stoi()和istringstream(),它们都做同样的事情。我只能得到一个整数 例如,如果字符串是“巧克力和牛奶250磅和2盎司或1.5硬币。” 上述所有功能均不起作用。它不会占用整根绳子。如果我只留下一个数字,那么它就会工作。我希望能够读取整个字符串并仅获取所有整数(而不是浮点) 我对字符串使用了while(getline())。然后试着把它编成字符串 尽管如此,如果我只能返回字符串中整数的总数,那就更好了。无论哪种方式,我都

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

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

我对字符串使用了
while(getline())
。然后试着把它编成字符串


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

一种方法是使用分隔符拆分字符串,并对单个字符串使用
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,' ')){
        if(std::isdigit(token[0]) &&stoi(token) && token.find('.')==std::string::npos){
            count++;
        }
    }

    std::cout<<count<<std::endl;
}
#包括
#包括
#包括
int main(){
std::string s=“巧克力和牛奶250磅和2盎司或1.5硬币。”;
整数计数=0;
标准:istringstream iss;
字符串标记;
while(getline(iss,token,')){
if(std::isdigit(令牌[0])&&stoi(令牌)&&token.find('.')==std::string::npos){
计数++;
}
}

std::cout一种方法是使用分隔符拆分字符串,并在单个字符串上使用
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,' ')){
        if(std::isdigit(token[0]) &&stoi(token) && token.find('.')==std::string::npos){
            count++;
        }
    }

    std::cout<<count<<std::endl;
}
#包括
#包括
#包括
int main(){
std::string s=“巧克力和牛奶250磅和2盎司或1.5硬币。”;
整数计数=0;
标准:istringstream iss;
字符串标记;
while(getline(iss,token,')){
if(std::isdigit(令牌[0])&&stoi(令牌)&&token.find('.')==std::string::npos){
计数++;
}
}

std::coutSorry,但我对“try”、“catch”不太熟悉。这超出了我的技能范围。我仍在学习一些基础知识,特别是循环。有没有更简单的方法来完成这一切?也许只有一种方法可以返回字符串中的整数数量,而不是读取字符串并将其转换为int(而不是float)?您也可以简单地包括
并检查
isdigit(标记[0])
,如果是,则使用
stof
进行转换,并检查小数部分是否大于一些小数字,如
1E-5
,如果是,则将其保留为浮点,如果不是重新解释为整数值。所有
尝试{…}catch{…}
的作用是尝试转换,如果转换失败,将引发一个异常,该异常将被
catch
部分捕获——允许您处理错误(在这种情况下,只需跳到下一个标记)请参阅
try/catch
很容易理解。但是,我将编辑答案以不使用它,并应用类似于上述注释的内容。可能还需要解释
token.find('.')==std::string::npos
检查
标记中是否存在
以放弃
1.5
的转换,并明确
int
转换为
“1.5”
会将值转换为
1
当到达
时停止转换。
做得好。谢谢你的帮助。我非常感谢。你能解释一下什么是
npos
,比如它做什么。基于
if()
function,有没有可能让它更简单?我这么说是因为在这个函数中有一些我以前不熟悉的东西。我以前从未使用过一个有很多参数的
if()
语句。对不起,我不熟悉“try”、“catch”。这超出了我的技能范围。我仍在学习一些基础知识,特别是循环。有没有更简单的方法来完成这一切?也许只有一种方法可以返回字符串中的整数量,而不是读取字符串并将其转换为整数(而不是浮点)?您也可以简单地包括
和检查
isdigit(标记[0])
如果是,则使用
stof
进行转换,检查小数部分是否大于一些小数字,如
1E-5
,如果是,则将其保留为浮点数,如果不是,则重新解释为整数值。所有
尝试{…}catch{…}
的作用是尝试转换,如果转换失败,将引发一个异常,该异常将被
catch
部分捕获——允许您处理错误(在这种情况下,只需跳到下一个标记)请参阅
try/catch
很容易理解。但是,我将编辑答案以不使用它,并应用类似于上述注释的内容。可能还需要解释
token.find('.')==std::string::npos
检查
标记中是否存在
以放弃
1.5
的转换,并明确
int
转换为
“1.5”
会将值转换为
1
当到达
时停止转换。
做得好。谢谢你的帮助。我非常感谢。你能解释一下什么是
npos
,比如它做什么。基于
if()
函数,有没有可能使它更简单?我这么说是因为在这个函数中有一些我以前不熟悉的东西。我以前从未使用过一个包含大量参数的如此大的
if()
语句。