2013-07-18 70 views
0

我正在寻找一种有效的方式来获得一个双重字符串在c + +。我现在CString的双重功能,但我不能使用,因为这个字符串的格式如下:得到一个字符串双C++

DOUBLE - SPACE - REST OF STRING THAT I ALSO NEED TO SAVE. 

的问题是双重的大小可以不同的,所以我怎么能得到双重高效我仍然可以保存字符串的其余部分。

+3

你到目前为止尝试过什么..?你有一些代码可以发布给我们看你试过的吗? – Sean

+1

您是否尝试过在可管理的可解析部分中分割字符串? – dowhilefor

回答

1

使用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

+1,但很高兴看到'if(iss >> d && iss.ignore()&& getline(iss,rest))...;其他std :: cerr <<“失败\ n”;' - 太多开始C++程序员认为输入成功并浪费时间了解他们的错误... –

+0

我复制了这个,它几乎可以工作,但是现在我得到以下错误:main.cpp | 31 | error:变量'std :: istringstream iss'具有初始值设定项,但为不完整类型|。我该如何解决这个问题? – Aesir

+1

@Aesir [Google](https://www.google.com/search?q=variable+istringstream+has+initializer+but+incomplete+type) - > ['#include '](http:// stackoverflow .COM /问题/ 8091976 /使用-istringstream-给出错误 - 为什么)。 – Dukeling

4
std::istringstream s(theString); 
s >> theDouble; 

s现在包含字符串,它可以容易地被提取的其余部分。

0

如果您的输入格式固定。你可以先将它与空间分开。那么你有以下几点:

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解析您的两倍。

编辑:添加分割代码:

+0

@Dukeling:我的意思是,一个双重空间,一个空间,另一个是字符串。在这种情况下,从太空中分离应该起作用。 –