Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
taker27
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 4
1

Подсчитать количество гласных букв в каждой строке текста

23.06.2017, 12:51. Просмотров 2345. Ответов 9
Метки нет (Все метки)

По форуму и в интернетах искал, на си нету такого
Суть задачи в том, что задано: количество строк LINE и сами строки, нужно подсчитать количество гласных в каждой строке и вывести цифры через пробел. Пробовал много раз с разных сторон, никак. Этот код чуть менее чем полностью переделан из скопипащенного где автор искал количество гласных, согласных и спец символов в одной(!) строке.
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 <stdio.h>
#include <stdlib.h>
 
#define LINE 2           // количество строк
 
int main()
{
    char sentence[100];
    int i, j, vowels[LINE];
    
    gets(sentence);
    for(j=0;j<LINE;j++)                 // проблема гдето тут
    {
        for(i=0;sentence[i] != '\0';i++)
        {
            if ((sentence[i] == 'a' || sentence[i] == 'e' || sentence[i] ==           //ищем гласные
            'i' || sentence[i] == 'o' || sentence[i] == 'u' || sentence[i] == 'y') ||
            (sentence[i] == 'A' || sentence[i] == 'E' || sentence[i] ==
            'I' || sentence[i] == 'O' || sentence[i] == 'U' || sentence[i] == 'Y'))
            {
            vowels[j]++;
            }
        }
    }
    for(i=0;i<LINE;i++)
    {
        printf("%d ", vowels[i]);
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2017, 12:51
Ответы с готовыми решениями:

Подсчитать количество гласных и согласных букв в строке без учета регистра
помогите написать программу на СИ. Пользователь вводит с клавиатуры строку S. Подсчитать...

Подсчитать сколько гласных букв в строке
Подсчитать сколько гласных букв в строке. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() {...

Подсчитать количество гласных и количество согласных букв
Дана строка символов. Подсчитать количество гласных и количество согласных букв

Посчитать в строке количество гласных букв
Посчитать в строке количество гласных букв #include &lt;stdio.h&gt; #include&lt;conio.h&gt; int...

Определить количество гласных и согласных букв в строке
Вобщем, задание было такое...Дана строка символов. Определить количество слов в строке. Вот...

9
Massaraksh7
311 / 264 / 87
Регистрация: 27.05.2017
Сообщений: 1,350
23.06.2017, 14:51 2
11 строку поставьте после 13.
(и vowels нулями заполните в самом начале)
1
LightProger
40 / 40 / 15
Регистрация: 29.12.2016
Сообщений: 291
23.06.2017, 19:27 3
taker27, Сегодня могу подсказать псевдокод, код писать лень. Подключаем заголовочный файл stdio.h, пишем функцию main. Объявляем переменные, пишем цикл, пока переменная ..., getchar, не равна, если читаешь файл.то EOF, если строку, то пока не равна '\n'. В цикле пишешь, если переменная ... приравнивается и перечисляешь и гласные буквы, то переменная ++, else тото и тото, Итог printf переменной, куда записаны гласные буквы.

Добавлено через 10 минут
В принципе товарищ, сверху все написал, но если использовать цикл while,то массив не нужен, допустим while(c = getchar() != '\n')
Через if перечисляешь гласные буквы и складываешь их, результат выводишь на экран.
1
taker27
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 4
23.06.2017, 20:11  [ТС] 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
#include <stdio.h>
 
#define LINE 3
 
int main()
{
    int c, i, v[LINE];
    for(i=0;i<LINE;i++)
    {
        v[i] = 0;
    }
    for(i=0;i<LINE;i++)
    {
        while((c = getchar()) != '\n')
        {
            if ((c == 'a' || c == 'e' || c ==
                'i' || c == 'o' || c == 'u' || c == 'y') ||
                (c == 'A' || c == 'E' || c ==
                'I' || c == 'O' || c == 'U' || c == 'Y'))
                v[i]++;
        }
    }
    for(i=0;i<LINE;i++)
    {
        printf("%d ", v[i]);
    }
}
ПС сорь что без комментов, но суть та же)
0
23.06.2017, 20:11
LightProger
40 / 40 / 15
Регистрация: 29.12.2016
Сообщений: 291
23.06.2017, 21:22 5
Цитата Сообщение от taker27 Посмотреть сообщение
Спасибо за ответы!
А массив зачем, у вас есть в задаче создание массива?

Добавлено через 15 минут
Считаешь в цикле строки и выводишь на экран, сколько гласных букв на экран, массив не нужен. Получаешь поток с клавиатуры getchar, как только он равняется '\n', считаешь строки, и считаешь гласные в этой строке и все.

Добавлено через 29 минут
line =0;
i =0;
с = getchar != '\n'
если вам нужно подчитать две строки, то while(c == '\n" && ine< 2)
{
line ++;

if(c == гласные буквы)
j= c;
j++;
printf(" В этой строке %i гласных букв", j)
else printf("Гласных букв нет");
и т.д.

Добавлено через 6 минут
там вместо i, -j, или наоборот. Не важно!
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10646 / 6338 / 1586
Регистрация: 25.07.2009
Сообщений: 12,076
26.06.2017, 03:04 6
Цитата Сообщение от taker27 Посмотреть сообщение
По форуму и в интернетах искал, на си нету такого
Да ну?!
Цитата Сообщение от taker27 Посмотреть сообщение
О чудо, все работает как нужно
Цитата Сообщение от taker27 Посмотреть сообщение
задано: количество строк LINE и сами строки, нужно подсчитать количество гласных в каждой строке
Не похоже, что "как нужно", эдак дай Бог в одной строке гласные посчитаются, а по заданию их несколько.
Не заморачиваясь вводом массива строк и сделав вывод чуть нагляднее:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define is_vowel(c) ( strchr("AEIOUY", toupper(c)) )
int count_vowels(const char * s) {
    return ( !(*s) ) ? 0 : !!is_vowel(*s) + count_vowels(s + 1);
}
 
int main(void) {
    const char * strings[] = { "any", "many", "money", "more" };
    int i;
    
    for ( i = 0; i < sizeof(strings) / sizeof(*strings); ++i )
        printf("String: %s\tvowels: %d\n", strings[i], count_vowels(strings[i]));
    
    return 0;
}
Код
andrew@andrew0716 ~/c/strings
$ gcc -o count_vowels count_vowels.c

andrew@andrew0716 ~/c/strings
$ ./count_vowels
String: any   vowels: 2
String: many  vowels: 2
String: money vowels: 3
String: more  vowels: 2
0
CoderHuligan
833 / 570 / 206
Регистрация: 30.06.2015
Сообщений: 3,182
Записей в блоге: 28
26.06.2017, 14:24 7
Так эффективнее:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <ctype.h>
int count_vowels[26]={1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0};
int main(void) {
    const char * strings[] = { "any", "many", "money", "more" };
    int i, c, j; size_t n=sizeof(strings) / sizeof(*strings);
    for ( i = 0; i < n; ++i )
    {
        for( j=0, c = 0; strings[i][j]; ++j )
            if(count_vowels[toupper(strings[i][j])-65])++c;
        printf("String: %s\tvowels: %d\n", strings[i], c);
    }
    return 0;
}
1
LFC
732 / 537 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
26.06.2017, 16:41 8
CoderHuligan, может лучше
C
1
count_vowels[toupper(strings[i][j])-'A']
? А то магические цифры,они такие магические....
1
CoderHuligan
833 / 570 / 206
Регистрация: 30.06.2015
Сообщений: 3,182
Записей в блоге: 28
26.06.2017, 16:45 9
Да, можно и так, но тогда уж лучше через define.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10646 / 6338 / 1586
Регистрация: 25.07.2009
Сообщений: 12,076
26.06.2017, 17:12 10

Не по теме:

Очередной Хеловорлд фест :)


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <limits.h>
 
int main(void) {
    int i, cnt, letters[UCHAR_MAX + 1] = { 0 };
    const char * p, * strings[] = { "any", "many", "money", "more" };
    
    for ( p = "AEIOUYaeiouy"; *p; ++p )
        letters[*p] = 1;
    
    for ( i = 0; i < sizeof(strings) / sizeof(*strings); ++i ) {
        for ( cnt = 0, p = strings[i]; *p; ++p )
            cnt += letters[*p];
        printf("String: %s\tvowels: %d\n", strings[i], cnt);
    }
    
    return 0;
}
4
26.06.2017, 17:12
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2017, 17:12

Подсчитать количество гласных букв в каждом слове предложения (через библиотечную функцию)
решение через библиотечную функцию Ввести с клавиатуры предложение. Подсчитать количество...

Подсчитать количество слов, являющихся регулярными цепочками и в которых имеется чередование гласных и согласных букв
На языке Си ЗАДАНИЕ: Дана последовательность слов, которую необходимо преобразовать или...

Подсчитать во введенной строке количество букв ‘Л’ и количество букв ‘И’
&quot;Подсчитать во введенной строке количество букв ‘Л’ и количество букв ‘И’.&quot; Буквы можно на латыне...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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