我有一個字符串流,我需要將第一部分取出,然後將其餘部分取出到單獨的字符串中。例如,我有字符串"This is a car"
,我需要以2個字符串結尾:a = "This"
和b = "is a car"
。獲取字符串流的其餘部分C++
當我使用stringstream的使用<<
得到的第一部分,然後我用.str()
轉換爲一個字符串,這當然給了我這一切。「This is a car"
,我怎樣才能得到它玩我怎麼想?
我有一個字符串流,我需要將第一部分取出,然後將其餘部分取出到單獨的字符串中。例如,我有字符串"This is a car"
,我需要以2個字符串結尾:a = "This"
和b = "is a car"
。獲取字符串流的其餘部分C++
當我使用stringstream的使用<<
得到的第一部分,然後我用.str()
轉換爲一個字符串,這當然給了我這一切。「This is a car"
,我怎樣才能得到它玩我怎麼想?
string str = "this is a car";
std::stringstream ss;
ss << str;
string a,b;
ss >> a;
getline(ss, b);
編輯:校正感謝@Cubbi:
ss >> a >> ws;
編輯:
該解決方案可以處理在某些情況下,換行符(如我的測試情況下),但在別人失敗(如@ rubenvb的例子),而我還沒有找到一個乾淨的方式來解決它。 我認爲@ tacp的解決方案更好,更強大,應該被接受。
你可以讀出的第一位後做的流getline
....
您可以這樣做:首先獲取整個字符串,然後獲取第一個單詞,使用substr
獲取其餘部分。
stringstream s("This is a car");
string s1 = s.str();
string first;
string second;
s >> first;
second = s1.substr(first.length());
cout << "first part: " << first <<"\ second part: " << second <<endl;
測試這GCC 4.5.3輸出:
first part: This
second part: is a car
值得注意的是,如果原始字符串實際上是''這是一輛汽車'' – Rollie 2013-07-22 18:31:42
,您也可以在沒有變量s1的情況下執行該操作,只需執行s.str()。substr(first.length()) ; – 2017-01-20 21:25:17
另一種方式做,這是rdbuf:
stringstream s("This is a car");
string first;
stringstream second;
s >> first;
second << s.rdbuf();
cout << "first part: " << first << " second part: " << second.str() << endl;
這可能是一個不錯的選擇,如果你最終將結果輸出到一個流而不是一個字符串。
這使得b''是一輛車「',使它成爲一輛車'',那麼'ss >> a >> ws;'? – Cubbi 2013-04-18 03:26:33
謝謝,我用string.erase(0,1)來擺脫空間。 – Linkandzelda 2013-04-18 03:33:32
@Cubbi:好點,但是你的解決方案恰恰假定了一個空白字符。我覺得像'b.erase(0,b.find_first_not_of(「...」))''更安全。 – Beta 2013-04-18 03:35:15