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)。或者我不明白你的问题。