Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 78

Найти, сколько раз в каждой строке текста встречается заданное слово

17.09.2011, 08:48. Показов 6174. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Мне лишь необходимы ваши подсказки, либо алгоритм решения следующего задания:

Дан текст. Найти сколько раз в каждой строке встречается заданное слово;
сколько слов в строке содержит гласных букв больше, чем согласных.

Заранее спасибо! Всем откликнувшимся!

Это всего лишь поиск заданного слова в строке, в целом:

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
#include <string.h>
#include <stdio.h> 
#define SIZE 100                     
 
int main()
{
    char  s[SIZE];                  
    char  substr[SIZE];        
    int   n = 0;                 
    char* temp = s;                  
    
    puts("Vvedite stroku: \n");     
    gets(s);                        
    puts("\nVvedite slovo: \n"); 
    gets(substr);             
   
  
    while((temp = strstr(temp, substr)) != NULL) 
    {
                                    
        n++;                        
        temp++;                      
                                     
    }
    printf("\nEto slovo vstrechaetsya %d raz(a)!", n);
    getchar();
    return 0;
}
А хотелось бы так, чтобы слово искалось в каждой строке. Есть идеи?

Результат 1-ой части проги должен быть таким:
в 1-ой строке заданное слово встречается н-раз,
во 2-ой н-раз,
и так далее.

И хотелось бы подсказок по поводу 2-ой части задания.

Добавлено через 20 часов 46 минут
Up...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2011, 08:48
Ответы с готовыми решениями:

Определить, сколько раз в строке встречается заданное слово
4,3) Определить, сколько раз в строке встречается заданное слово

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

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

27
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.09.2011, 18:51
Студворк — интернет-сервис помощи студентам
-=ЮрА=-, тем более функция isalpha() быстро работает и сразу отсекает все ненужное, а дальше остается только определить какая буква - гласная или согласная
0
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 78
18.09.2011, 18:52  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
спасибо за мысль пробора только гласных
Мне тоже этот ход понравился.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.09.2011, 18:55
Цитата Сообщение от Just_dake Посмотреть сообщение
Thinker, Я знаю про что вы говорите. В этом случае прога будет определять кол-во гл. и согл-ых в общей строке. К примеру я ввожу текст: это моя программа.
Прога должна вывести сообщение, что 2 слова имеют больше гласных нежели согласных.
Но у вас проверка str[i]==... зависит от i, но i меняется только относительно длины другого слова

Добавлено через 1 минуту
Если что, выкладывайте свой вариант, а мы его проверим и оптимизируем
1
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 78
18.09.2011, 19:02  [ТС]
А ведь все просто, проверяем каждое отдельное слово, если в нем гласных больше, то выводим нужное сообщение. Тока никак не могу проверку каждого слова сделать.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.09.2011, 19:24
Just_dake, гласные и согласные в тексте и будут числом гласных и согласных в словах:
Поясню, возьмём предложение
Гласных в тексте больше, а согласных меньше?
В тексте 36 букв из них 12 гласных и 24 согласных, причём а является союзом и также может быть расценена как отдельное слово, вот и всё. Достаточно не считать гласные и согласные в словах(для этого нужно выделять слова и считать уже в них), а просто посчитать число в тектсе, результаты будут идентичными. Если нужно вывести все слова в тексте и отдельно в каждом посчитать, сейчас накидаю код, увидишь результаты работы будут теми же

Добавлено через 10 минут
Just_dake, вот накидал код
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
iint main()
{
    char str[1024],fnd[1024];
    char *buf, ch;
    int i,nCount;
    int nGlasn, nSogl;
 
    char delim[] = " ,;!?";
    char glasn[] ="aoeyiuAOEYIU";
    int  sLen, gLen = strlen(glasn);
 
    do
    {
        printf("Enter intput string\r\n");
        scanf("%[^\n]%c",str,&ch);//Можем вводить строки с пробелами
        printf("Enter string to search\r\n");
        scanf("%[^\n]%c",fnd,&ch);//Можем вводить строки с пробелами
        nCount = 0;//Обнулили счётчик с результатами поиска заданного слова
        buf = strstr(str,fnd);
        while(buf)
        {
            nCount++;
            buf = strstr(buf + 1,fnd);
        }
        nGlasn = 0; 
        nSogl  = 0;
        //Разбивам строку на токены (в данном случае слова)
        buf = strtok(str,delim);
        while(buf)
        {
            sLen = strlen(buf);
            for(i = 0; i < sLen; i++)
            {
                if(isalpha(str[i]))
                if(strchr(glasn,str[i]))
                    nGlasn++;
                else
                    nSogl++;
            }
            buf = strtok(NULL,delim);
        }
        printf("Text contain find-word %d times\r\n",nCount);
        printf("Text contain %d glasnih\r\n",nGlasn);
        printf("Text contain %d soglasnih\r\n",nSogl);
        printf("[Y/N] - Y - enter new string\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
[Результат работы]
Enter intput string
test input text that contain string1 string2 string3
Enter string to search
string
Text contain find-word 3 times
Text contain 12 glasnih
Text contain 28 soglasnih
[Y/N] - Y - enter new string
Поясню отличие в согласных и Я и Thinker, недодумали проверять не только является ли символ буквой, но isalpha() по видимому цифры тоже как буквы воспринимает, нужно было ввести доп проверку на принадлежность символа цифрам isdigt

Добавлено через 2 минуты
Хотя стоп в моём последнем алгоритме тоже нет проверки isdigt, так приведу мысли в порядок...
(пара мин)

Добавлено через 4 минуты
Простой подсчёт по всему тексту
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
int main()
{
    char str[1024],fnd[1024];
    char *buf, ch;
    int i,nCount;
    int nGlasn, nSogl;
 
    char glasn[]="aoeyiuAOEYIU";
    int  sLen, gLen = strlen(glasn);
 
    do
    {
        printf("Enter intput string\r\n");
        scanf("%[^\n]%c",str,&ch);//Можем вводить строки с пробелами
        printf("Enter string to search\r\n");
        scanf("%[^\n]%c",fnd,&ch);//Можем вводить строки с пробелами
        nCount = 0;//Обнулили счётчик с результатами поиска заданного слова
        buf = strstr(str,fnd);
        while(buf)
        {
            nCount++;
            buf = strstr(buf + 1,fnd);
        }
        nGlasn = 0; 
        nSogl  = 0;
        sLen = strlen(str);
        //Перебираем всю строку
        for(i = 0; i < sLen; i++)
        {
            if(isalpha(str[i]) && !isdigit(str[i]))
            if(strchr(glasn,str[i]))
                nGlasn++;
            else
                nSogl++;
        }
        printf("Text contain find-word %d times\r\n",nCount);
        printf("Text contain %d glasnih\r\n",nGlasn);
        printf("Text contain %d soglasnih\r\n",nSogl);
        printf("[Y/N] - Y - enter new string\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Результат работы
Enter intput string
test input text that contain string1 string2 string3
Enter string to search
string
Text contain find-word 3 times
Text contain 11 glasnih
Text contain 31 soglasnih
[Y/N] - Y - enter new string

Разбив на токены
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
int main()
{
    char str[1024],fnd[1024];
    char *buf, ch;
    int i,nCount;
    int nGlasn, nSogl;
 
    char delim[] = " ,;!?";
    char glasn[] ="aoeyiuAOEYIU";
    int  sLen, gLen = strlen(glasn);
 
    do
    {
        printf("Enter intput string\r\n");
        scanf("%[^\n]%c",str,&ch);//Можем вводить строки с пробелами
        printf("Enter string to search\r\n");
        scanf("%[^\n]%c",fnd,&ch);//Можем вводить строки с пробелами
        nCount = 0;//Обнулили счётчик с результатами поиска заданного слова
        buf = strstr(str,fnd);
        while(buf)
        {
            nCount++;
            buf = strstr(buf + 1,fnd);
        }
        nGlasn = 0; 
        nSogl  = 0;
        //Разбивам строку на токены (в данном случае слова)
        buf = strtok(str,delim);
        while(buf)
        {
            sLen = strlen(buf);
            for(i = 0; i < sLen; i++)
            {
                if(isalpha(str[i]) && !isdigit(str[i]))
                if(strchr(glasn,str[i]))
                    nGlasn++;
                else
                    nSogl++;
            }
            buf = strtok(NULL,delim);
        }
        printf("Text contain find-word %d times\r\n",nCount);
        printf("Text contain %d glasnih\r\n",nGlasn);
        printf("Text contain %d soglasnih\r\n",nSogl);
        printf("[Y/N] - Y - enter new string\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Результат работы
Enter intput string
test input text that contain string1 string2 string3
Enter string to search
string
Text contain find-word 3 times
Text contain 12 glasnih
Text contain 28 soglasnih
[Y/N] - Y - enter new string

Я не могу понять, результаты должны быть идентичными!!!

Добавлено через 1 минуту
Just_dake, разбив на слова
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Разбив на токены
1
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 78
18.09.2011, 19:29  [ТС]
-=ЮрА=-, кажется все-таки вечер сказывается

Добавлено через 4 минуты
кажется мы друг-друга недопоняли
Предположим я ввожу текст, допустим "ааап" будем считать словом! Я ввожу: ааап ааап.
И прога выводит: В 2-х словах "доминируют" гласные буквы.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.09.2011, 20:20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Just_dake Посмотреть сообщение
Предположим я ввожу текст, допустим "ааап" будем считать словом! Я ввожу: ааап ааап.
И прога выводит: В 2-х словах "доминируют" гласные буквы.
- понял, сейчас подправлюсвой код

Добавлено через 12 минут
Цитата Сообщение от Just_dake Посмотреть сообщение
Предположим я ввожу текст, допустим "ааап" будем считать словом! Я ввожу: ааап ааап.
И прога выводит: В 2-х словах "доминируют" гласные буквы.
Теперь идёт подсчёт гласных и согласных именно в словах + ведётся поиск по тексту именно слова а не подстроки!Почувствуй разницу между поиском слова string и подстроки string допустим в строке string string1 string2 string3
подстроку найдём 4-ри раза а вот слово всего лишь одно
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
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
 
int main()
{
    char str[1024],fnd[1024];
    char *buf, ch;
    int i,nCount;
    int nGlasn, nSogl;
 
    char delim[] = " ,;!?";
    char glasn[] ="aoeyiuAOEYIU";
    int  sLen, gLen = strlen(glasn);
 
    do
    {
        printf("Enter intput string\r\n");
        scanf("%[^\n]%c",str,&ch);//Можем вводить строки с пробелами
        printf("Enter word to search\r\n");
        scanf("%[^\n]%c",fnd,&ch);//Можем вводить строки с пробелами
        nCount = 0;//Обнулили счётчик с результатами поиска заданного слова
        
        //Разбивам строку на токены (в данном случае слова)
        buf = strtok(str,delim);
        while(buf)
        {
            printf("\tWord : %s\r\n",buf);
            nGlasn = 0; 
            nSogl  = 0;
            sLen = strlen(buf);
            if(strstr(buf,fnd))//Содержит ли buf подстроку fnd
            if(strcmp(buf,fnd) == 0)//Ищем именно слово а не подстроку
                nCount++;
            
            for(i = 0; i < sLen; i++)
            {
                if(isalpha(str[i]) && !isdigit(str[i]))
                if(strchr(glasn,str[i]))
                    nGlasn++;
                else
                    nSogl++;
            }
            printf("Word contain %d glasnih\r\n",nGlasn);
            printf("Word contain %d soglasnih\r\n",nSogl);
            buf = strtok(NULL,delim);
        }
        printf("Text contain find-word %d times\r\n",nCount);
        printf("[Y/N] - Y - enter new string\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
[Результат работы]
Enter intput string
test input text that contain string string1 string2 string3
Enter word to search
string
Word : test
Word contain 1 glasnih
Word contain 3 soglasnih
продолжение вывода
Word : input
Word contain 1 glasnih
Word contain 3 soglasnih
Word : text
Word contain 1 glasnih
Word contain 3 soglasnih
Word : that
Word contain 1 glasnih
Word contain 3 soglasnih
Word : contain
Word contain 2 glasnih
Word contain 4 soglasnih
Word : string
Word contain 2 glasnih
Word contain 3 soglasnih
Word : string1
Word contain 2 glasnih
Word contain 4 soglasnih
Word : string2
Word contain 2 glasnih
Word contain 4 soglasnih
Word : string3
Word contain 2 glasnih
Word contain 4 soglasnih
Text contain find-word 1 times
[Y/N] - Y - enter new string
1
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 78
18.09.2011, 20:31  [ТС]
-=ЮрА=-, Спасибо огромное , выручил!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2011, 20:31

Определить, сколько раз в текстовом файле встречается заданное слово
Здравствуйте, не хватает знаний написать программу на Си: &quot;Составить программу, определяющую, сколько раз в текстовом файле, не...

Алгоритм Кнута-Морриса-Пратта - определить, сколько раз встречается заданное слово в текстовом файле
Здравствуйте, мне нужно найти алгоритмом Кнута-Морриса-Пратта сколько раз встречается какое-нибудь слово в текстовом файле. Файл заполнен...

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

Строки. Определить, сколько раз в строке встречается данное слово
Задача 1. Определить, сколько раз в строке встречается данное слово. Задача 2. Дана символьная строка. Найти наибольшую...

Определить, сколько раз в строке встречается введенное пользователем программы слово
Написать код который определить, сколько раз в строке встречается введенное пользователем программы слово.


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru