C++中文本文件输入问题

C++中文本文件输入问题,c++,file,input,fileinputstream,C++,File,Input,Fileinputstream,我必须读一个文本文件;然而,某个文本文件给了我一些问题。文本文件不仅是一整本电子书,而且还有几个重音字母。我一次读一个字母,在适当的标点符号或空格处停下来。我通过测试字母和标点符号(如撇号)的适当ASCII来实现这一点。有没有办法让我也能读懂重音字母,但要把它们与其他字母分开?我需要添加任何随机库吗 以下是我的代码,以获取单词: string GetNextWord(){ string w=""; // used to store each

我必须读一个文本文件;然而,某个文本文件给了我一些问题。文本文件不仅是一整本电子书,而且还有几个重音字母。我一次读一个字母,在适当的标点符号或空格处停下来。我通过测试字母和标点符号(如撇号)的适当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
}
到目前为止,除此之外,所有文件都适用。
您可以在此处看到输入->

重音ASCII字符不属于正常字符集。i、 e.127岁以上。到目前为止,你还不清楚它对每个文件都有效,但是看看上面,如果你遇到重音字符,我猜你进入了一个无限循环。要正确处理扩展字符,您需要知道要处理的代码页。我还不确定std::tolower是否正确处理ASCII中的扩展字符,至少在没有被告知区域设置/代码页的情况下是这样。

它适用于带有数字、标点符号、大写和小写字母的文件,到目前为止,重音字母是唯一会引起我问题的东西。不过,我同意你的观点,它将进入一个无限循环。使用名称空间std;有很多方法可以表示重音字母。最可能的情况是您看到的是拉丁1编码,这意味着您应该添加| | c>=161&&c