我正在尋找一種有效的方式來獲得一個雙重字符串在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