0

我必须阅读一个文本文件;但是,一个特定的文本文件给我带来了问题。不仅文本文件很大(一整本电子书),而且还有几个重音字母。我一次读一个字母,停在适当的标点符号或空格上。我通过为字母和标点符号(例如撇号)测试适当的 ASCII 来做到这一点。有没有办法我也可以读重音字母,但将它们与其他字母分开?我需要添加任何随机库吗?

这是我得到这个词的代码:

string GetNextWord(){
string w="";                            // used to store each word temporarly
    char c;                                 // used for each individual character   
    int i=0;                                // a counter
input.get(c);                           // gets first character
c=tolower(c);                           // forces c to lowercase

while(c>=97 && c<=122 || c==39){        // loops while the character is a lowercase letter or '
    w=w+c;                              // adds character to word string
    input.get(c);                       // gets next character
    c=tolower(c);                       // forces c to lowercase
++i;                                    // increments counter
}
if(i>0)                                 // if there is a word
    return w;                           // return the word
else                                    // otherwise string is NULL
        return "NOT A WORD!";               // returns a flag to main
}

到目前为止,适用于每个文件,除了这个。
你可以在这里看到输入-> http://www.gutenberg.org/cache/epub/244/pg244.txt

4

1 回答 1

0

重音 ASCII 字符不属于正常字符集。即高于127。你不清楚它“到目前为止适用于每个文件”,但看看上面,如果你遇到重音字符,我猜你正在进入无限循环。要正确处理扩展字符,您需要知道您正在处理的代码页。我也不确定是否std::tolower正确处理 ASCII 中的扩展字符,至少没有被告知语言环境/代码页是什么。

于 2010-09-17T03:51:26.947 回答