2012-06-01 65 views
2

我有一個字符串矢量包含數字,單詞,空格,甚至怪異的字符,如引號。我正在嘗試使用stringstream讀取所有內容,以便我可以將字符串中的雙打分開。如何使用stringstream在字符串中保留引號?

當我這樣做:

字符串流包含

4165此包包含12 1/2" 螺絲

代碼:

stringstream >> mydouble 
stringstream >> mystring 

mydouble包含

4165 

然後是被讀入了mystring的唯一事情就是

此包包含12 1/2

我怎樣才能讓它保持整個行?

有時我的文件包含此:

4165這個軟件包包含2 1/2" 螺絲

65這個軟件包包含12> 1/2" 螺絲

這個包包含1個螺釘

+1

什麼是mystring的類型?你有它的方式,如果這是一個'std :: string'或一個char數組,那裏唯一的東西應該是「This」。 –

回答

3

遺憾的是,流提取運算符>>不擅長您希望它做的事情。正確的方式做你想做的是取整行

std::getline(stringstream, myline); 

然後寫代碼來解析行。

如何解析該行?想到五個選項:

  1. 編寫自己的代碼,而不依賴於特殊工具。
  2. 使用Lex/Flex和Yacc/Bison。
  3. 使用助推精神。
  4. 使用POSIX <regex.h>
  5. 使用C++ 11 <regex>或TR1 <tr1/regex>

這些都不是微不足道的。如果你想知道,對於你的應用程序,我可能會選擇1,選擇3或選擇5.無論你選擇做什麼,祝你好運。

如果你不知道從哪裏開始,你爲什麼不擡頭std::getline(),在<string>呈現,並且std::atoi(),在<cstdlib>呈現的?這些應該給你一些關於接下來去哪裏的想法。

+0

更正:在''中提供的答案的早期版本引用了'std :: getline()'。那是錯誤的標題。標準庫中有兩個不同的'std :: getline()'函數,並且您需要另一個''中提供的函數。我相應地修正了上面的答案。 – thb

+0

這也可以用sscanf()來完成。 – Adrian

相關問題