簡體   English   中英

為什么這個字符停止我的程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM