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