Программа неверно считывает информацию из текстового файла, по-видимому, слева направо, затем справа налево - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь прочитать информацию об А. Слове и Б. Частота произнесенного слова.Когда функция считывает информацию, первый вызов читает ее слева (слово) справа (частота), затем следующий - справа (частота) слева (слово).Я предполагаю это из-за моего форматирования.Я предполагаю, что его пропускаемое слово.

dicFile << s.key << " " << s.wordCount << endl;

dicFile - это текстовый файл, в который он выводится.s.key - слово, s.wordcount - целое число.

Текстовый файл в формате:

Бухгалтерский учет 3

Apple 1

Хлеб1

....

читается

            fstream dictionaryFile;
            string dF, word, freq;
            cout << "Input dictionary file: ";
            cin >> dF;
            dictionaryFile.open(dF);
            if (dictionaryFile.is_open()) {
                while (dictionaryFile >> word) {
                    dictionaryFile >> word >> freq;
                    int frequ = stoi(freq);
                    newItem.key = word;
                    newItem.wordCount = frequ;
                    tree.AVL_Insert(newItem);
                }
            }
            else { cout << endl << "ERROR"; }

Это сбой в atoi, я предполагаю, потому что он не может обрабатывать «Бухгалтерский учет».

1 Ответ

1 голос
/ 22 мая 2019

Это потому, что он не может справиться с "Apple".

Сначала while (dictionaryFile >> word) читает «Бухгалтерский учет», а затем

dictionaryFile >> word >> freq;

читает «3» в word и «Apple» в freq.

Что вы должны сделать, это

while (dictionaryFile >> word >> freq) {
    int frequ = stoi(freq);
    // ...

или вы можете удалить кучу переменных-перетасовок и прочитать прямо в ваш "элемент":

while (dictionaryFile >> newItem.key >> newItem.wordCount) {
    tree.AVL_Insert(newItem);
}
...