【发布时间】:2019-04-11 02:56:10
【问题描述】:
我有一个项目,其中输入采用特定格式,需要从中提取数据。
格式类似于H79.03 = J99.30,我需要获取浮点数。
仅使用std::stringstream 和std::string 的最佳方法是什么?
【问题讨论】:
-
到目前为止你尝试了什么?发布您的代码。
标签: c++ string stringstream
我有一个项目,其中输入采用特定格式,需要从中提取数据。
格式类似于H79.03 = J99.30,我需要获取浮点数。
仅使用std::stringstream 和std::string 的最佳方法是什么?
【问题讨论】:
标签: c++ string stringstream
是的,你只能使用 stringstream 和 string。首先,用空格替换无效数字。然后取数字。
string originalStr = "H79.03 = J99.30";
string expression = originalStr;
for(int i = 0; i < expression.length(); i++) {
if (!isdigit(expression[i]) && (expression[i] != '.'))
expression[i] = ' ';
}
stringstream str(expression);
float firstValue, secondValue;
str >> firstValue;
str >> secondValue;
cout<<firstValue<<endl; // it prints 79.03
cout<<secondValue<<endl; // it prints 99.30
【讨论】:
firstValue 和secondValue 需要声明为float 或double 而不是int
isdigit() 为 '.' 返回 false。你需要改用这个:if (!isdigit(expression[i]) && (expression[i] != '.'))
std::string s = "H79.03 = J99.30";
std::istringstream iss(s);
double d1, d2;
if (iss.ignore() &&
iss >> d1 &&
iss.ignore(4) &&
iss >> d2)
{
// is d1 and d2 as needed...
}
【讨论】: