为什么这个字母会停止我的程序?

jef*_*pan 1 c++ ascii non-ascii-characters

换行符在c ++中是否具有某种特殊意义?它是非ASCII字符吗?

我正在尝试为更大的文本中的每个唯一的n字符子串构建马尔可夫链.每当我遇到一个新的唯一子字符串时,我将其输入到一个映射中,该映射的值为256个元素的向量(扩展ASCII表中每个字符的一个元素).

打印出文件的全部内容时没有问题("lines"是使用ifstream和getline构建的文本行的向量):

for(int i=0; i<lines.size(); i++) cout << lines[i] << endl;
Run Code Online (Sandbox Code Playgroud)

整个文本文件显示在控制台中.当我尝试将换行符返回到期望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);
}    
Run Code Online (Sandbox Code Playgroud)

我已经使用了调试器,当它到达第二行的第一列时,它就会对我产生影响 - 没有任何错误或任何错误.它在此函数中失败,而不是调用函数.

我正在使用的文件是圣诞颂歌(Project 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
Run Code Online (Sandbox Code Playgroud)

该函数应在第二行返回第一个字符时中断.如果我摆脱换行符,或者如果我在程序中逐行构建"行"向量,则不会发生这种情况.知道什么是错的吗?

Dav*_*men 8

你的GetNextChar函数假设如果你在某行的最后一个字符,下一行会有一个字符.如果下一行中没有字符会怎样?这可能发生在两个地方:当您点击文件结尾,或者下一行是空字符串时.

第二行是空字符串.