Форум программистов, компьютерный форум CyberForum.ru

Работа с файлами и поиск подстроки - C++

Восстановить пароль Регистрация
 
ELSErg
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 3
06.03.2014, 13:14     Работа с файлами и поиск подстроки #1
Программа должна подсчитать кол-во буквосочетаний "ab" в некотором текстовом файле. Но работает не корректно. Вроде как выводит ответ, но не всегда верный. Хотя бы в тексте программы есть только одно искомое буквосочетание, но программа возвращает ответ 3. Не могу разобраться. Так что прошу помощи у знатоков. Заранее спасибо
ЗЫ: Код приведу ниже

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    const int  N = 81;
    int count = 0;
    char str[N];
 
    ifstream fin("11test.txt");
    if (!fin) cout << "File open error";
    
    while (!fin.eof()) {
        fin.getline(str, N);
 
        for (int i = 0; i < N-1; i++) {
            if ((str[i] == 'a') && (str[i+1] == 'b')) count++;
        }
    }
    
    fin.close();
 
    cout << "There are " << count << " 'ab' combinations in '11test.txt'" << endl;
    system("pause");
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
THE--MASTER
Заблокирован
06.03.2014, 13:41     Работа с файлами и поиск подстроки #2
На здоровье
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
std::fstream fs("11test.txt", std::ios::in | std::ios::binary);
if(!fs.is_open())
    return -1;
 
fs.seekg(0, std::ios::end);
size_t file_size = fs.tellg();
fs.seekg(0, std::ios::beg);
char *data = new char[file_size];
fs.read(data, file_size);
fs.close();
 
std::string strData = data;
 
std::string sample = "ab";
int sampleCounter = 0;
size_t pos = 0;
while (true)
{
    pos = strData.find( sample, pos );
    if(pos != std::string::npos)
    {
        sampleCounter++;
        pos += sample.size();
    }
    else
        break;  
}   
    
delete[] data;
 
std::cout << "Sample '" << sample << "' meets " << sampleCounter << " times in the file" << std::endl;
 
system("pause");
ELSErg
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 3
06.03.2014, 15:55  [ТС]     Работа с файлами и поиск подстроки #3
Большое спасибо за ответ!
И не могли бы вы указать на ошибку в моем коде?
THE--MASTER
Заблокирован
06.03.2014, 16:20     Работа с файлами и поиск подстроки #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ELSErg Посмотреть сообщение
И не могли бы вы указать на ошибку в моем коде?
обнуляй массив перед записью туда следующей строки из файла, иначе в нём могут остаться данные первой, более длинной строки с твоими искомыми лишними AB

C++
1
2
3
4
5
6
7
8
while (!fin.eof()) {
        memset(str, 0, N);
        fin.getline(str, N);        
        for (int i = 0; i < N-1; i++) {
            if ((str[i] == 'a') && (str[i+1] == 'b'))
                count++;
        }
    }
ELSErg
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 3
06.03.2014, 17:00  [ТС]     Работа с файлами и поиск подстроки #5
Класс! Спасибо!!!
Yandex
Объявления
06.03.2014, 17:00     Работа с файлами и поиск подстроки
Ответ Создать тему
Опции темы

Текущее время: 21:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru