Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Поиск слов в файле

03.07.2010, 03:36. Показов 2206. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попытался сделать вот эту: Поиск слов в файле

Программу... Сложность ее по-моему мнению, в том, что поиск подстроки должен быть независим от регистра. Поправьте, если я не прав, ибо с регистром это абсолютно без проблем. Но вот я попытался сделать без регистра. Навертел жуткий велосипед. Это не работа с файлом. Просто заготовка. Но я запутался по полной программе. Сижу уже три часа и тупо не могу ее написать. Вот что вышло, за код не ругать, пытался всеми доступными средствами. Да кстати. Обязательно через char.

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
60
61
62
63
64
65
66
#include <iostream>
#include <cstdlib>
#include <cstring>
int main()
{
    char str[100];
    std::cout<<"Enter string\n";
    std::cin.getline(str, 100);
    char str2[100];
    std::cout<<"Enter substring\n";
    std::cin.getline(str2,100);
    char str3[100];
    strcpy(str3, str);
    char *ptr;
    char* TempPtr;
    ptr=strtok(str, ".");
    TempPtr=strtok(str3," ");
    while (1)
    {
        if(!stricmp(TempPtr,str2))
        {
            std::cout<<ptr<<'\n';
            break;
        }
        if (strchr(TempPtr,'.')!=0)
            break;
        if(strchr(TempPtr,'.')==0)
            TempPtr=strtok(0, " ");
    }
    while(ptr)
    {
        ptr=strtok(0,".");
        if (ptr)
            while(1)
                {
                    TempPtr=strtok(ptr, " ");
                    if (TempPtr)
                    {
                        if(!stricmp(TempPtr,str2))
                            {
                                std::cout<<ptr<<'\n';
                                break;
                            }
                        if (strchr(TempPtr,'.')!=0)
                            break;
                        if(TempPtr==ptr)
                            break;
                        //if(strchr(TempPtr,'.')==0)
                        //  TempPtr=strtok(0, " ");
                /*      if(TempPtr)
                            {
                                if(!stricmp(TempPtr,str2))
                                    {
                                        std::cout<<ptr<<'\n';
                                        break;
                                    }
                            }
                        else
                            break;*/
                    }
                    else
                        break;
                }
    }
    return 0;
}
Добавлено через 24 минуты
Вот с учетом регистра, а как все же без него?

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
#include <iostream>
#include <cstring>
#include <cstdlib>
int main()
{
    char Str[100];
    std::cout<<"Enter string\n";
    std::cin.getline(Str, 100);
    char SubStr[100];
    std::cout<<"Enter substring\n";
    std::cin.getline(SubStr, 100);
    char*Ptr;
    Ptr=strtok(Str, ".");
    if(strstr(Ptr, SubStr)!=0)
        std::cout<<Ptr<<'\n';
    while (Ptr)
    {
        Ptr=strtok(0, ".");
        if (Ptr)
        {
            if (strstr(Ptr, SubStr)!=0)
                std::cout<<Ptr<<'\n';
        }
    }
    return 0;
}
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2010, 03:36
Ответы с готовыми решениями:

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не могу понять почему не работает: ...

Поиск слов в файле
есть файл с текстом, нужно написать програму которая пригласит пользователя ввести слово и будет выводить предложения из файла в которых...

Поиск слов в файле
Здравствуйте. У меня такая задача: Разработать программу, которая осуществляет в текстовом файле поиск заданных слов. Слова...

19
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.07.2010, 08:04
создай вектор, где каждый элемент - строка
читай каждое предложение в строку
строку сохраняй в вектор
потом в векторе ищешь нужное предложение

Добавлено через 3 минуты
для слов одной строки можно создать ещё один вектор
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.07.2010, 10:14  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
создай вектор, где каждый элемент - строка
читай каждое предложение в строку
строку сохраняй в вектор
потом в векторе ищешь нужное предложение

Добавлено через 3 минуты
для слов одной строки можно создать ещё один вектор
А без стл? Так подумал вчера ночью... Если и строку и подстроку перевести в нижний регистр, и тогда только искать, будет ли это считаться как выполнение задания?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.07.2010, 10:30
там задание на поиск слова, а слово отделено от других слов
без векторов можно сделать массив указателей
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.07.2010, 10:33  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
там задание на поиск слова, а слово отделено от других слов
Отделено, но я ищу по предложениям, strtok(str, "."). А потом уже ищу вхождение подстроки в строку. Если входит - печатаю это предложение.

програму которая пригласит пользователя ввести слово и будет выводить предложения из файла в которых присудствует данное слово!!!
Формально такое решение подходит. Но можно ли так на практике?
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
03.07.2010, 10:35
Цитата Сообщение от Lavroff Посмотреть сообщение
Вот с учетом регистра, а как все же без него?
Можно завести две буферные строки, загружать в них предложение и слово, приводить к одному регистру, затем сравнивать.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.07.2010, 10:37  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
Можно завести две буферные строки, загружать в них предложение и слово, приводить к одному регистру, затем сравнивать.
Вот. Именно так я и подумал. Но все же, будет ли это решением задачи в практическом смысле? Ведь печатать он будет не предложение, которое в строке было, а предложение которое приведено в нижнему/верхнему регистру. Или же вы имеете ввиду еще две строки, то есть в str2 копировать данные из ptr и приводить ее к нижнему регистру, а в substr2 копировать данные из substr и приводить их к нижнему регистру, если слово входит печать ptr, а ptr каким был таким и остался?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.07.2010, 10:40
Цитата Сообщение от Lavroff
я ищу по предложениям, strtok(str, ".")
strtok() может понадобиться, когда нужно разделить строку на слова
а так он съедает точку, предложение потом нужно выводить
1
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
03.07.2010, 10:43
Цитата Сообщение от Lavroff Посмотреть сообщение
Но все же, будет ли это решением задачи в практическом смысле? Ведь печатать он будет не предложение, которое в строке было, а предложение которое приведено в нижнему/верхнему регистру
Для этого буфер и нужен.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.07.2010, 10:43  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
strtok() может понадобиться, когда нужно разделить строку на слова
а так он съедает точку, предложение потом нужно выводить
Предложение то по сути можно выводить и без точки... Хотя...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.07.2010, 10:48
Цитата Сообщение от Lavroff
Предложение то по сути можно выводить и без точки
не, без точки нельзя
вдруг добавится условие "вывести все такие предложения друг за другом" или "сохранить в новый файл в том же формате, что и исходный"

Добавлено через 1 минуту
это вообще такой знак, когда что-то неудобно написать, начинаешь подгонять задачу под код
значит программа тобой управляет
таким образом не дело сделаешь, а в тупик зайдёшь
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.07.2010, 10:49  [ТС]
accept, В этом плане конечно да.

kazak, Вы имели ввиду вот так?

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
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <fstream>
int main()
{
    FILE*f=fopen("D:\\Test.txt", "r");
    if (!f)
    {
        std::cout<<"File is not open\n"<<'\n';
        return 2;
    }
    char SubStr[100];
    std::cout<<"Enter substring\n";
    std::cin.getline(SubStr, 100);
    char SubStr2[100];
    strcpy(SubStr2, SubStr);
    strlwr(SubStr2);
    char Str[256];
    while (fgets(Str, 256, f)!=0)
    {
    char*Ptr;
    Ptr=strtok(Str, ".");
    char str2[100];
    strcpy(str2, Ptr);
    strlwr(str2);
    if(strstr(str2, SubStr2)!=0)
        std::cout<<Ptr<<'\n';
    while (Ptr)
    {
        Ptr=strtok(0, ".");
        if (Ptr)
        {
            strcpy(str2, Ptr);
            strlwr(str2);
            if (strstr(str2, SubStr)!=0)
                std::cout<<Ptr<<'\n';
        }
    }
    }
    return 0;
}
Добавлено через 38 секунд
Цитата Сообщение от accept Посмотреть сообщение
не, без точки нельзя
вдруг добавится условие "вывести все такие предложения друг за другом" или "сохранить в новый файл в том же формате, что и исходный"

Добавлено через 1 минуту
это вообще такой знак, когда что-то неудобно написать, начинаешь подгонять задачу под код
значит программа тобой управляет
таким образом не дело сделаешь, а в тупик зайдёшь
А как делается через массив указателей?
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
03.07.2010, 10:51
Лучший ответ Сообщение было отмечено ForEveR как решение

Решение

вот такой вариант (STL)
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
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
 
std::string uptolow(std::string str) {
    for (int i=0;i<strlen(str.c_str());i++)
        if (str[i] >= 0x41 && str[i] <= 0x5A)
            str[i] = str[i] + 0x20;
    return str;
}
 
int main()
{
    std::string wrd="gOOD";
    std::string word=uptolow(wrd);
 
    std::string text,ln;
 
    std::ifstream in("1.txt", std::ios::in | std::ios::binary);
    while (getline(in,text)){
        ln=uptolow(text);
        int i = ln.find(word);
        if (i!=std::string::npos)
            std::cout<<"position="<<i<<std::endl;
    }
 
    return EXIT_SUCCESS;
}
Добавлено через 2 минуты
Цитата Сообщение от Lavroff Посмотреть сообщение
А без стл?
тогда вам надо на с а не на с++?
1
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
03.07.2010, 10:52
Lavroff, да, примерно так.
1
Унылый школьник
 Аватар для Demihalf
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
03.07.2010, 11:00
Lavroff, а что мешает сделать еще одну строку-оригинал, в которую перед изменением регистра положить исходное предложение? И потом вместо измененной строки выводить ее
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.07.2010, 21:09  [ТС]
PointsEqual, Разве С++ онли стл? оО
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
04.07.2010, 15:38
Цитата Сообщение от Lavroff Посмотреть сообщение
Разве С++ онли стл?
Нет, конечно. Дело в другом: STL реализует кучу алгоритмов, за отсутствием которых и приходилось бы велосипеды делать. Просто при наличии такого мощного проверенного и отлаженного арсенала городить уродцев, делающих то же самое, но не факт, что правильно, как-то незачем...
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.07.2010, 15:42  [ТС]
easybudda, Понятное дело) Но если еще не знаешь стл, а изучаешь все по порядку, то как же быть, кроме как городить велосипеды?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
04.07.2010, 15:52
Цитата Сообщение от Lavroff Посмотреть сообщение
Но если еще не знаешь стл
Не знаешь - так учи! http://www.cplusplus.com/reference/
На самом деле совсем не так сложно, как может на первый взгляд показаться. Главное вкурить основную концепцию использования этого счастья (контейнеры, итераторы, прочее...). Опять же много книжек есть хороших...
1
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
04.07.2010, 16:37
по-моему проще разбивать строку strtok потом сравнивать с искомым словом без учета регистра stricmp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.07.2010, 16:37
Помогаю со студенческими работами здесь

Поиск слов в файле
Разработать программу, которая читает текстовой файл и некоторое слово и выводит те строки файла, которые содержат данное слово. Имя...

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

Поиск слов в файле, начинающихся с
Необходимо: прочесть текст в файле, вывести все слова, начинающиеся с некоторой буквы. В данном случае - &quot;w&quot;. Искать обязательно...

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

Поиск повторяющихся слов в текстовом файле
подскажите есть вот такая задача В файле записаны различные слова через пробел. Нужно считать все слова и вывести сколько раз повторяется...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru