Форум » Обработка символьных строк » Не могу понять, в чём ошибка. Задание 24(№ 2557) C++ » Ответить

Не могу понять, в чём ошибка. Задание 24(№ 2557) C++

Василий__2: Текстовый файл 24-s1.txt состоит не более чем из 106 заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых встречается комбинация F*O, где звёздочка обозначает любой символ. [pre2]#include<iostream> #include<fstream> #include<string> #include<cmath> using namespace std; int main() { string path = "C:\\Users\\Admin\\Downloads\\24-s1.txt"; int mas[1001]; int l = 0; bool check = 1; ifstream fin(path); int count = 0; char r1 = '3', r2 = '3', r3 = '3', r4 = '3'; //этот блок записывает длины строк в массив if (fin.is_open()) { while (!fin.eof()) { string str; getline(fin, str); mas[count] = str.length(); count++; } fin.close(); fin.open(path); //этот - проверяет каждую строку на наличие в ней сочетания F*O for (int i = 0; i < count; i++) { while (fin.get(r1) && mas != 0) { if (check) { if (r1 == 'F' && r3 == 'O') { l++; check = 0; } r4 = r3; r3 = r2; r2 = r1; mas--; } else { mas--; } } r1 = '3', r2 = '3', r3 = '3', r4 = '4'; check = 1; } } else { cout << "ERROR!"; } fin.close(); cout << l; return 0; }[/pre2] Моя программа выводит число 756. Правильный ответ 757. Что не так?

Ответов - 2

Поляков: Попробуйте запустить программу для файла, в котором одна строка: --------------------------------------------- JKHSDBGFLWEUFHOASDKJGFAWDFYG --------------------------------------------- Если все верно, вы должны получить 1 (FHO). Если неверно - отлаживаем в пошаговом режиме.

Василий__2: так, я понял в чём ошибка. должно быть не так: if (check) { if (r1 == 'F' && r3 == 'O') { l++; check = 0; } r4 = r3; r3 = r2; r2 = r1; mas--; } а так: if (check) { if (r1 == 'O' && r3 == 'F') { l++; check = 0; } r4 = r3; r3 = r2; r2 = r1; mas--; }



полная версия страницы