我正在寻找一种有效的方式来获得一个双重字符串在c + +。我现在CString的双重功能,但我不能使用,因为这个字符串的格式如下:得到一个字符串双C++
DOUBLE - SPACE - REST OF STRING THAT I ALSO NEED TO SAVE.
的问题是双重的大小可以不同的,所以我怎么能得到双重高效我仍然可以保存字符串的其余部分。
我正在寻找一种有效的方式来获得一个双重字符串在c + +。我现在CString的双重功能,但我不能使用,因为这个字符串的格式如下:得到一个字符串双C++
DOUBLE - SPACE - REST OF STRING THAT I ALSO NEED TO SAVE.
的问题是双重的大小可以不同的,所以我怎么能得到双重高效我仍然可以保存字符串的其余部分。
使用istringstream
来读取double值,忽略一个字符(预计空间),并读取行的其余部分。
string s = "1.11 my string";
double d;
string rest;
istringstream iss(s);
iss >> d;
iss.ignore(); // ignore one character, space expected.
getline(iss, rest, '\0');
+1,但很高兴看到'if(iss >> d && iss.ignore()&& getline(iss,rest))...;其他std :: cerr <<“失败\ n”;' - 太多开始C++程序员认为输入成功并浪费时间了解他们的错误... –
我复制了这个,它几乎可以工作,但是现在我得到以下错误:main.cpp | 31 | error:变量'std :: istringstream iss'具有初始值设定项,但为不完整类型|。我该如何解决这个问题? – Aesir
@Aesir [Google](https://www.google.com/search?q=variable+istringstream+has+initializer+but+incomplete+type) - > ['#include
std::istringstream s(theString);
s >> theDouble;
s
现在包含字符串,它可以容易地被提取的其余部分。
如果您的输入格式固定。你可以先将它与空间分开。那么你有以下几点:
DOUBLE
REST OF STRING THAT I ALSO NEED TO SAVE.
斯普利特:
std::string str = "3.66 somestring";
std::stringstream ss(str);
std::string buffer;
while(std::getline(ss, buffer, ' ')) {
// add necessary data to containers...
}
现在你可以使用std::atof
解析您的两倍。
编辑:添加分割代码:
@Dukeling:我的意思是,一个双重空间,一个空间,另一个是字符串。在这种情况下,从太空中分离应该起作用。 –
你到目前为止尝试过什么..?你有一些代码可以发布给我们看你试过的吗? – Sean
您是否尝试过在可管理的可解析部分中分割字符串? – dowhilefor