[英]Why is this char stopping my program?
在C ++中,換行符是否具有某種特殊意義? 它是非ASCII字符嗎?
我正在嘗試為較大的文本中的每個唯一的n個字符子字符串構建一個馬爾可夫鏈。 每次遇到新的唯一子字符串時,我都會將其輸入到映射中,該映射的值為256個元素的向量(擴展的ASCII表中的每個字符一個元素)。
當我打印出文件的全部內容時沒有問題(“ lines”是使用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);
}
我遍歷了調試器,當調試器到達第二行的第一列時,它突然出現在我身上–沒有錯誤或任何錯誤。 它在此函數內而不是在調用函數內失敗。
我正在使用的文件是“聖誕節頌歌”(Gutenberg項目中出現的第一件事)。 供參考,以下是前幾行:
STAVE I: MARLEY'S GHOST
MARLEY was dead: to begin with. There is no doubt
whatever about that. The register of his burial was
該函數在應返回第二行的第一個字符時中斷。 如果我擺脫了換行符,或者在程序中逐行構建“行”向量,則不會發生這種情況。 知道有什么問題嗎?
您的GetNextChar
函數假定如果您在某行的最后一個字符處,則在下一行中將有一個字符。 如果下一行沒有字符怎么辦? 這可能發生在兩個地方:當您命中了文件結尾時,或者當下一行是空字符串時。
第二行是空字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.