2013-04-11 152 views
2

我用下面的掙扎:我在讀從一個XML文件中的以下的std :: stringstream的讀取「 n」字符串並寫入文本文件?

其中一些複印後&處理被寫入一個文本文件
"sigma=0\nreset" 

。而我希望下面

sigma=0 
reset 

但遺憾的是我只得到

sigma=0\nreset 

但是當我直接流

out << "sigma=0\nreset" 

我得到:

sigma=0 
reset 

我目前懷疑有一些限定詞的「\ n」在「複製&處理過程中」丟失......這可能嗎?如何追蹤不再是換行的流中的「\ n」?

謝謝!

+0

用'「\\ n」'代替''\ n''不太可能,你能在讀完之後和寫入之前驗證字符串,並顯示你的輸出代碼嗎? – Useless 2013-04-11 15:12:17

+0

xml文件是否包含一個換行符,或'\\'字符後跟一個'n'字符? – 2013-04-11 19:03:37

回答

3

這是因爲輸出函數沒有處理像'\n'這樣的轉義序列,它是編譯器,只能用於文字。編譯器對字符串的內容一無所知,因此在字符串內部時,不能將"\n"轉換爲換行符。

你必須解析字符串本身,並在適當時寫出換行符。

+1

除非我誤解了你,否則沒有翻譯「\ n」到換行符。 ''\ n''是一個換行符。 – Useless 2013-04-11 15:11:10

+0

@使用澄清一點。 – 2013-04-11 15:12:05

+1

是的,我假設讀入的字符串是_identical_到文字'「sigma = 0 \ nreset」',但現在我不太確定... – Useless 2013-04-11 15:15:14

1

假設std::stringstream實際上包含什麼相當於字面"sigma=0\\nreset"(長度= 14個字符),而不是"sigma=0\nreset"(長度爲13個字符),你必須自行更換。這樣做是不是很困難的,無論是使用升壓轉換器的replace_allhttp://www.boost.org/doc/libs/1_53_0/doc/html/boost/algorithm/replace_all.html),或std::string::findstd::string::replace

std::stringstream inStream; 
inStream.str ("sigma=0\\nreset"); 
std::string content = inStream.str(); 

size_t index = content.find("\\n",0); 

while(index != std::string::npos) 
{ 
    content.replace(index, 2, "\n"); 
    index = content.find("\\n",index); 
} 

std::cout << content << '\n'; 

注意:你可能要考慮的情況下,當結束行系統其他東西比"\n"

如果std::stringstream實際上包含"sigma=0\nreset",則請將複製/處理和寫入代碼發佈到文本文件。

相關問題