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

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

17.09.2011, 08:48. Показов 6047. Ответов 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
Ответ Создать тему
Новые блоги и статьи
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru