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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Mak Clyde
Сообщений: n/a
#1

Поиск заданной последовательности символов в бинарном файле - C++

15.10.2012, 07:44. Просмотров 1879. Ответов 3
Метки нет (Все метки)

Допустим в файле написано "raz dva tri dva raz raz dva". Нужно произвести поиск и подсчёт введёной пользователем последовательности символов. Алгоритм поиска-подсчёта должен осуществляться с функцией strcmp. Среда Visual C++.

Вот мой недоделанный код:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "StdAfx.h"
#include <locale.h>
#include <stdio.h>
#include <string>
#include <iostream>
 
using namespace std;
 
int main ()
{
    system("color f3");
    setlocale(LC_ALL, "RUSSIAN");
 
    unsigned int cnt=0;
    char text[] = "raz dva tri dva raz raz dva";
    char word[10];
    unsigned long int tl = strlen(text);
 
    FILE* fp = fopen("myFile.txt" , "wb");
    if (fp != NULL)
    {
        cout << "Запись в файл..." << endl;
        for (unsigned int i=0; i<tl; i++)
        {
        putc(text[i], fp);
        }
    }
    fclose(fp);
    fp = fopen("myFile.txt" , "rb");
    if (fp != NULL)
    {
        cout << text << endl << "Введите слово поиска" << endl;
        gets(word);
        unsigned int wl = strlen(word);
        cout << "В слове поиска " << wl << " символов" << endl;
        if (wl<10)
        {
        ??????????????????????????????????????????????
            cout << "Совпадений: " << cnt <<endl;
        }
        else
        cout << "В слове поиска число символов больше 10" << endl;
    }
    else
    {
    cout << "Невозможно открыть\n";
    fclose(fp);
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2012, 07:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск заданной последовательности символов в бинарном файле (C++):

Поиск в файле заданной последовательности символов - C++
Друзья, помогите плиз!!! Нужно написать программу поиска в файле заданной последовательности символов не превышающей по длине 10 знаков....

Поиск в бинарном файле - C++
мне надо в бинарном файле найти одну 8-ми байтную строку, я сделал вот такой поиск, но он почему то не работает :( std::fstream stream; ...

Поиск в бинарном файле - C++
в бинарном файле записаны цены вводится цена программа должна выдать все услуги равные цене не пойму почему он выдаёт cout &lt;&lt; &quot;Error!...

Поиск по структуре в бинарном файле - C++
Всем привет! Хотел бы обратиться к более опытным людям.Есть задача &quot;Запись имеет вид: название инструмента, число, месяц и год...

Бинарный поиск в бинарном файле - C++
Здравствуйте, помогите решить проблему. Написал программу для нахождения числа бинарным поиском и перебором в бинарном файле. Программа,...

Поиск в бинарном файле с использованием файловых потоков - C++
Подскажите как реализовать поиск объекта в бинарном файле.(телефонный справочник, поиск по названию абонента)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.10.2012, 12:42 #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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "StdAfx.h"
#include <locale.h>
#include <stdio.h>
#include <string>
#include <iostream>
 
using namespace std;
 
int main ()
{
    system("color f3");
    setlocale(LC_ALL, "RUSSIAN");
 
    unsigned int cnt=0;
    char text[] = "raz dva tri dva raz raz dva";
    char word[10];
    unsigned long int tl = strlen(text);
 
    FILE* fp = fopen("myFile.txt" , "wb");
    if (fp != NULL)
    {
        cout << "Запись в файл..." << endl;
        for (unsigned int i=0; i<tl; i++)
        {
        putc(text[i], fp);
        }
    }
    fclose(fp);
    fp = fopen("myFile.txt" , "rb");
    if (fp != NULL)
    {
        cout << text << endl << "Введите слово поиска" << endl;
        gets(word);
        unsigned int wl = strlen(word);
        cout << "В слове поиска " << wl << " символов" << endl;
        if (wl<10)
        {
            char temp[10];
            while (!feof(fp))
            {
                fscanf(fp, "%s", temp);
            
                if (!(strcmp(temp, word))) cnt++;
            }
            
            cout << "Совпадений: " << cnt <<endl;
        }
        else
        cout << "В слове поиска число символов больше 10" << endl;
    }
    else
    {
    cout << "Невозможно открыть\n";
    fclose(fp);
    }
    
    
    return 0;
}
Mak Clyde
Сообщений: n/a
16.10.2012, 11:04 #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
char temp[10];
while (!feof(fp))
{
fscanf(fp, "%s", temp);
if (!(strcmp(temp, word))) cnt++;
}
А как сделать так, чтобы размерность массива была изменяющейся, в зависимости от слова поиска? На temp[wl] компилятор выдаёт ошибку
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2012, 20:47 #4
Цитата Сообщение от Mak Clyde Посмотреть сообщение
На temp[wl] компилятор выдаёт ошибку
Размерность статического массива должна задаваться константой.
Цитата Сообщение от Mak Clyde Посмотреть сообщение
А как сделать так, чтобы размерность массива была изменяющейся, в зависимости от слова поиска?
Создавать динамический масив:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (wl<10)
{
  char *temp = new char[wl + 1];
  while (!feof(fp))
  {
       fscanf(fp, "%s", temp);
            
       if (!(strcmp(temp, word))) cnt++;
  }
            
   cout << "Совпадений: " << cnt <<endl;
            
   delete [] temp;
}

Но такой код, в целом, будет кривоват. Всё будет правильно работать, если слова в строке будут не больше чем введённое слово. Если какое-то слово в файле будет больше, то выделенной памяти уже не хватит. При освобождении памяти, на каких-то компиляторах, будет ошибка. Например, в VC 2010 - зависание, mingv - нормально отрабатывает, т.е. поведение неопределённое. Поэтому память нужно выделять с запасом, чтобы могло поместиться самое длинное слово из файла:
C++
1
char *temp = new char[255];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 20:47
Привет! Вот еще темы с ответами:

Поиск числа в файле, открытым в бинарном режиме - C++
Здравствуйте уважаемые дамы и господа, возник вопрос по поводу поиска числа в бинарном файле. Допустим имеется код: #include...

Определить количество пробелов в заданной последовательности символов - C++
Определить количество пробелов в заданной последовательности символов. Желательно с блок схемой чтоб понять что да как.

Поиск в файле заданной буквы - C++
здраствуйте дорогие форумчане помогите пожалуйста с заданием. в файле есть готовый текст, надо с помощью алгоритма линейного поиска найти...

Подсчитать количество вхождений в строку заданной последовательности символов - C++
Дана строка символов. Подсчитать количество вхождений в строку заданной последовательности символов. Строка для обработки ввести с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.10.2012, 20:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru