2013-07-18 114 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:我的意思是,一個雙重空間,一個空間,另一個是字符串。在這種情況下,從太空中分離應該起作用。 –