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

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

23.06.2017, 12:51. Просмотров 6511. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2017, 12:51
Ответы с готовыми решениями:

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

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

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

Подсчитать количество гласных букв в каждой из заданных строк
Условие: Заданы М строк слов, которые вводятся с клавиатуры. Подсчитать количество гласных букв в...

9
314 / 267 / 87
Регистрация: 27.05.2017
Сообщений: 1,350
23.06.2017, 14:51 2
11 строку поставьте после 13.
(и vowels нулями заполните в самом начале)
1
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
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
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10877 / 6768 / 1619
Регистрация: 25.07.2009
Сообщений: 12,484
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
872 / 614 / 212
Регистрация: 30.06.2015
Сообщений: 3,407
Записей в блоге: 32
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
735 / 540 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
26.06.2017, 16:41 8
CoderHuligan, может лучше
C
1
count_vowels[toupper(strings[i][j])-'A']
? А то магические цифры,они такие магические....
1
872 / 614 / 212
Регистрация: 30.06.2015
Сообщений: 3,407
Записей в блоге: 32
26.06.2017, 16:45 9
Да, можно и так, но тогда уж лучше через define.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10877 / 6768 / 1619
Регистрация: 25.07.2009
Сообщений: 12,484
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2017, 17:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подсчитать количество гласных букв в каждой из заданных строк
Заданы М строк слов, которые вводятся с клавиатуры. Подсчитать ко-личество гласных букв в каждой из...

Подсчитать количество гласных букв в строке
// Лабораторная работа №5.cpp: определяет точку входа для консольного приложения. // #include...

Подсчитать количество гласных букв в строке
1. Вводится строка произвольного текста. Подсчитать количество гласных букв.

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


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

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

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