Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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++ 从字符字符串中提取2个数字?_C++_String - Fatal编程技术网

C++ 从字符字符串中提取2个数字?

C++ 从字符字符串中提取2个数字?,c++,string,C++,String,我正在尝试编写一个方法,将两个变量设置为字符字符串中的数字。字符串将类似于: [-][1][ ][ ][ ][ ][2][.][0][4] 其中可以提取数字-1和2.04。我知道方法签名可能是这样的: sscanf(array[i],"%d%f",&someint,&somedouble) 但我真的不知道该怎么写。任何帮助都将不胜感激您就快到了: sscanf(array[i], "%d %lf",&someint, &somedouble) 其中空格表示“

我正在尝试编写一个方法,将两个变量设置为字符字符串中的数字。字符串将类似于:

[-][1][ ][ ][ ][ ][2][.][0][4]
其中可以提取数字-1和2.04。我知道方法签名可能是这样的:

sscanf(array[i],"%d%f",&someint,&somedouble)
但我真的不知道该怎么写。任何帮助都将不胜感激

您就快到了:

sscanf(array[i], "%d %lf",&someint, &somedouble)
其中空格表示“0、1或多个空白字符”

<>但是如果你使用C++而不是C,最好从C++流开始。这会容易得多

#include <sstream>
std::istringstream my_number_stream(array[i]);
if (!(my_number_stream >> std::skipws >> someint >> somedouble)) {
    // oh noes ! an error !
}
#包括
std::istringstream my_number_stream(数组[i]);
如果(!(我的号码流>>std::skipws>>someint>>somedouble)){
//哦,不!一个错误!
}

这应该可以完成您的工作:

    int x;
    float y;
    const char* ss = "-1    2.04";
    istringstream iss(ss);
    iss >> x >> y;

如果输入是由用户提供的,例如,有人键入了它,首先你应该规范化它:将多个空格改为一个,将制表符改为空格,将逗号改为点(有些人使用逗号作为十进制分隔符而不是点),剪切前导空格和尾随空格,等等。让我们使用sscanf()(或任何你选择的解析)工作更轻松。

我的错,我用C++做这件事,我以为sscanf是为了让我的工作更轻松,而不是相反;-)我真的只是刚开始使用C++,所以我不太熟悉流。在C语言中有没有一种简单的方法可以做到这一点?只要使用我刚刚写的sscanf行,并进行一些错误检查(即:sscanf应该返回它成功读取的元素数,即2)。或者我不明白你的问题。