2011-09-09 30 views
1

換行符在C++中有什麼特別的意義嗎?它是一個非ASCII字符嗎?這個char爲什麼會阻止我的程序?

我正在嘗試爲大塊文本中的每個獨特的n字符子字符串構建一個馬爾可夫鏈。每遇到一個新的唯一子字符串,我將它輸入一個映射,其值是一個256元素的向量(擴展ASCII表中每個字符的一個元素)。

有沒有問題,當我打印出來的文件的全部內容(「線」是用ifstream的和函數getline建行文本的向量):

for(int i=0; i<lines.size(); i++) cout << lines[i] << endl; 

整個文本文件中顯示出來安慰。當我嘗試將換行符返回給期望char的函數時,會發生問題。 「moveSpaces」是一個整數常量,用於確定在每次迭代中向前移動字符串向量中的多少個字符。

char GetNextChar(int row, int col){ 
    for (int i=0; i<MOVESPACES; i++) { 
     if (col+1<lines[row].size()) { 
      col+=1; 
     } else {  // If you're not at the end of the line keep going 
      row+=1;  // Otherwise, move to the beginning of the next row 
      col=0; 
     } 
    } 
    return lines[row].at(col); 
}  

我走通過與調試器,當它到達它胡扯出來我2號線的第1列 - 沒有錯誤或任何東西。它在此函數內失敗,而不是調用函數。

我正在使用的文件是聖誕頌歌(在古登堡計劃中出現的第一件事)。以下是前幾行:

STAVE I: MARLEY'S GHOST 

MARLEY was dead: to begin with. There is no doubt 
whatever about that. The register of his burial was 

函數在應該返回第二行的第一個字符時中斷。如果我擺脫換行符,或者如果我在程序中逐行建立「線」向量,則不會發生這種情況。任何想法有什麼不對?

+0

什麼是'moveSpaces'? –

+3

我的調試器從不會對我產生任何影響......你的態度並不好,顯然 –

+2

老實說,我不能對這個問題做出正面或反面的評論。 「失敗」是什麼意思? – MSalters

回答

8

您的GetNextChar函數假設如果您在某行的最後一個字符處,則會在下一行中出現一個字符。如果下一行中沒有字符會發生什麼?這可能發生在兩個地方:當您擊中文件結尾或下一行是空字符串時。

第二行是空字符串。

+0

當然!太感謝了。 – jefflovejapan

+0

好點:所有關於換行符的討論都讓我覺得他確實有換行符。但最開始的'endl'表明,儘管提到了這些換行符,但他實際上並不存儲它們,只是將它們重新插入到輸出中。 – MSalters

相關問題