繁体   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