проблемы ввода текстового файла в C ++ - PullRequest
0 голосов
/ 17 сентября 2010

Мне нужно прочитать текстовый файл;Тем не менее, один определенный текстовый файл вызывает у меня проблемы.Мало того, что текстовый файл огромен (целая электронная книга), но также есть несколько акцентированных букв.Я читаю в словах по одной букве за раз, останавливаясь на соответствующей пунктуации или пробелах.Я делаю это, проверяя соответствующий 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

1 Ответ

0 голосов
/ 17 сентября 2010

Акцентированные символы ASCII выходят за пределы нормального набора символов. то есть выше 127. Вы не уверены, что это «работает на каждом файле до сих пор», но, глядя на вышесказанное, если вы сталкиваетесь с символами с ударением, я предполагаю, что вы входите в бесконечный цикл. Чтобы правильно обрабатывать расширенные символы, вам нужно знать, с какой кодовой страницей вы работаете. Я также не уверен, правильно ли обрабатывает std::tolower расширенные символы в ASCII, по крайней мере, если не узнать, что такое локаль / кодовая страница.

...