Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
 Аватар для tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19

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

26.09.2011, 19:44. Показов 5064. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет))
ребята помогите пожалуйста немогу разобраться вот задачкинужно написать только на С а не на С# или С++) задача 1 Дана непустая строка S.Посчитать, сколько гласных букв в строке.
задача2 Выяснить все ли буквы слова Х, стоящие на нечётных местах различны
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.09.2011, 19:44
Ответы с готовыми решениями:

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

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

Найти сколько гласных букв в строке
1) найти сколько гласных букв в строке!! Алфавит английский! Можно просто функцию нахождения! 2) в массиве A найти элемент A такое что...

45
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.09.2011, 20:05
Цитата Сообщение от tashka Посмотреть сообщение
Дана непустая строка S.Посчитать, сколько гласных букв в строке.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main(void)
{
    char str[80] = { 0 };
    unsigned vowel = 0, i;
    printf("Enter string >>> ");
    fgets(str, 80, stdin);
    for (i = 0; i < 80 && str[i] != '\0'; ++i)
    {
        switch (str[i])
        {
            case 'a': case 'e': case 'i': 
            case 'o': case 'u': case 'y':
                ++vowel;
        }
    }
    printf("%u vowels counted in %s\n", vowel, str);
    return 0;
}
1
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2011, 20:16
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Оба задания:

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
#include<stdio.h>
#include<string.h>
#define VOWEL "AEIOUYaeiouy"
#define N 1024
 
int Count(char *s)
{
   int n = 0;
   while(*s)
      if (strchr(VOWEL, *s++))
         n++;
   return n;
}
 
int Check(char *s)
{
   int flag = 1, i = 1, len;
   int chars[256] = {0};
   if (!(s[0]))
      return 0;
   len = strlen(s);
   while(i < len && flag)
   {
      chars[s[i]]++;
      if (chars[s[i]] > 1)
         flag = 0;
      i += 2;
   }
   return flag;
}
 
int main()
{
   char s[N];
   printf("s = ");
   fgets(s, N, stdin);
   printf("count = %d\n", Count(s));
   printf("%s\n", Check(s) ? "yes" : "no");
   return 0;
}
1
 Аватар для tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:32  [ТС]
спасибо))
а можно узнать fgets, unsigned vowel ,stdin что означают ??
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.09.2011, 20:39
Цитата Сообщение от tashka Посмотреть сообщение
vowel
это переменная(английский словарик в руки, ага)
Цитата Сообщение от tashka Посмотреть сообщение
unsigned
тип данных - беззнаковое целое

Добавлено через 18 секунд
Цитата Сообщение от tashka Посмотреть сообщение
stdin
поток ввода

Добавлено через 31 секунду
Цитата Сообщение от tashka Посмотреть сообщение
fgets
http://www.cplusplus.com/refer... dio/fgets/
0
 Аватар для tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:49  [ТС]
)) извини ,а можно как нибудь заменить попроще
unsigned
stdin
fgets
просто я новичок в С,мы такие функции не проходили())
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.09.2011, 20:53
Цитата Сообщение от tashka Посмотреть сообщение
мы такие функции не проходили())
эм... у нас вообще-то Болонский процесс и самообучение в ВУЗах, не в школе уже, книжку по Си откройте чтоли
0
 Аватар для tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:54  [ТС]
я не в школе учусь,но всё же спасибо большое))
0
236 / 28 / 18
Регистрация: 08.05.2011
Сообщений: 185
26.09.2011, 22:44
Цитата Сообщение от tashka Посмотреть сообщение
я не в школе учусь,но всё же спасибо большое))
ну да)))ты в колледже))))ай не хорошо списывать наташа))))
0
26.09.2011, 22:47
 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.09.2011, 07:41
Цитата Сообщение от Thinker
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int Check(char *s)
{
   int flag = 1, i = 1, len;
   int chars[256] = {0};
   if (!(s[0]))
      return 0;
   len = strlen(s);
   while(i < len && flag)
   {
      chars[s[i]]++;
      if (chars[s[i]] > 1)
         flag = 0;
      i += 2;
   }
   return flag;
}
что-то много букв

Цитата Сообщение от tashka
2 Выяснить все ли буквы слова Х, стоящие на нечётных местах различны
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>
 
int checkeq_oddltrs(const char *s)
{    
    const char *p;
    
    for ( ; *s != '\0' && *(s + 1) != '\0'; s += 2)
        for (p = s + 2; *p != '\0'; p += 2) {
            if (*s == *p)
                return 0;
             if (*(p + 1) == '\0')
                 break;
        }
    return 1;
}
 
int main(void)
{
    printf("%d\n", checkeq_oddltrs(""));
    printf("%d\n", checkeq_oddltrs("a"));
    printf("%d\n", checkeq_oddltrs("ab"));
    printf("%d\n", checkeq_oddltrs("aba"));
    printf("%d\n", checkeq_oddltrs("abb"));
    printf("%d\n", checkeq_oddltrs("abba"));
    printf("%d\n", checkeq_oddltrs("abbaa"));
    printf("%d\n", checkeq_oddltrs("abbacaab"));
    printf("%d\n", checkeq_oddltrs("abbacazb"));
    return 0;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
[guest@localhost tests]$ .ansi t.c -o t
[guest@localhost tests]$ ./t
1
1
1
0
1
1
0
0
1
[guest@localhost tests]$
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 07:46
accept, буква - элемент языка. Поэтому можно считать, что ASCII символы - буквы. В математике именно такие понятия. Нужны были уточнения какие именно буквы нужны. Плюс к тому мой алгоритм реализует только один проход по строке s. Можно в проверку добавить isalpha:
C
1
2
if (isalpha(s[i]))
   chars[s[i]]++;
но, думаю, это и так очевидно.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.09.2011, 07:51
Цитата Сообщение от Thinker
accept, буква - элемент языка. Поэтому можно считать, что ASCII символы - буквы.
выражение "слишком много букв" означает, что это "можно записать короче и яснее(понятнее)"

я тут ещё правлю
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>
 
int checkneq_oddltrs(const char *s)
{    
    const char *p;
    
    for ( ; *s != '\0' && *(s + 1) != '\0'; s += 2)
        for (p = s + 2; *p != '\0'; p += 2) {
            if (*s == *p)
                return 0;
             if (*(p + 1) == '\0')
                 break;
        }
    return 1;
}
 
int main(void)
{
    printf("%d\n", checkneq_oddltrs(""));
    printf("%d\n", checkneq_oddltrs("a"));
    printf("%d\n", checkneq_oddltrs("ab"));
    printf("%d\n", checkneq_oddltrs("aba"));
    printf("%d\n", checkneq_oddltrs("abb"));
    printf("%d\n", checkneq_oddltrs("abba"));
    printf("%d\n", checkneq_oddltrs("abbaa"));
    printf("%d\n", checkneq_oddltrs("abbacaab"));
    printf("%d\n", checkneq_oddltrs("abbacazb"));
    return 0;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
[guest@localhost tests]$ .ansi t.c -o t
[guest@localhost tests]$ ./t
1
1
1
0
1
1
0
0
1
[guest@localhost tests]$

поменял название функции на "проверить, что нечётные буквы не равны"
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:12
accept, все равно сложность вашего алгоритма O(n^2), а моего O(n). Хоть и много букв, как вы говорите, зато быстрее работает.

Вообще, прежде чем нападать, надо было предложить более приемлимый алгоритм. Выкладываете алгоритм сложностью O(n^2) и думаете, что удивили? Это как сравнение пузырьковой сортировки и сортировки методом подсчета (сложностью O(n)).
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.09.2011, 08:13
Цитата Сообщение от Thinker
все равно сложность вашего алгоритма O(n^2), а моего O(n)
это да
нужно переделать обе функции в (массив[256] + указатели)

Цитата Сообщение от Thinker
надо было предложить более приемлимый алгоритм
так я предложил, просто не думал о сложности
меня раздразило, что функция расчитана на короткие строки, вызывает strlen(), без которой можно обойтись, создаёт flag, которая не нужна, и вообще небрежно написана (типа скобки if (!(s[0])), в одной части return 0, в другой - какой-то flag, где так же мог бы быть return)
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:22
Цитата Сообщение от accept Посмотреть сообщение
это да
нужно переделать обе функции в (массив[256] + указатели)
Другой разговор. accept, вы прекрасно знаете насколько важна сложность алгоритма.

Добавлено через 1 минуту
Цитата Сообщение от accept Посмотреть сообщение
меня раздразило, что функция расчитана на короткие строки, вызывает strlen(), без которой можно обойтись, создаёт flag, которая не нужна
Как раз strlen() приводит затем к минимуму условий
if (i < len),
чтобы не проскочить конец строки при i+=2.

Добавлено через 1 минуту
Цитата Сообщение от accept Посмотреть сообщение
создаёт flag, которая не нужна
Это признак хорошего тона. Зато без break и return посреди цикла.

Добавлено через 1 минуту
Цитата Сообщение от accept Посмотреть сообщение
(типа скобки if (!(s[0]))
Единственное, на что соглашусь. Моя цель была создать быстрый алгоритм.

Добавлено через 2 минуты
Цитата Сообщение от accept Посмотреть сообщение
меня раздразило, что функция расчитана на короткие строки
Это с чего вы решили?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.09.2011, 08:25
Цитата Сообщение от Thinker
Моя цель была создать быстрый алгоритм.
strlen(), индексация

почему i равно 1 ?

Цитата Сообщение от Thinker
Это с чего вы решили?
len имеет тип int, а он может быть равен short int
указатели снимают ограничение длины, быстрее индексации
0
В вечном поиске...
 Аватар для Nursik77
275 / 235 / 30
Регистрация: 05.04.2011
Сообщений: 645
27.09.2011, 08:26
ЭЭЭ, я не понял? Тут что идет олимпиада по лучшему алгоритму и быстрому коду?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:30
Цитата Сообщение от accept Посмотреть сообщение
почему i равно 1 ?
Потому что нужны нечетные позиции в задаче

Добавлено через 1 минуту
Цитата Сообщение от accept;2017626
len имеет тип [B
int[/B], а он может быть равен short int
Это уже банальные придирки... Тем более, строка может гигабайт занимать, ваш short тут не к месту совсем...

Добавлено через 1 минуту
Цитата Сообщение от accept Посмотреть сообщение
указатели снимают ограничение длины, быстрее индексации
А вы в курсе, что при компиляции происходит замена выражений типа a[i] на *(a+i), поэтому результат всегда одинаковый

Добавлено через 50 секунд
Цитата Сообщение от Nursik77 Посмотреть сообщение
ЭЭЭ, я не понял? Тут что идет олимпиада по лучшему алгоритму и быстрому коду?
Конечно, быстрые алгоритмы очень важны!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.09.2011, 08:32
Цитата Сообщение от Thinker
Потому что нужны нечетные позиции в задаче
s[0] - нечётная позиция

Цитата Сообщение от Thinker
Это уже банальные придирки...
код непереносим

Цитата Сообщение от Thinker
А вы в курсе, что при компиляции происходит замена выражений типа a[i] на *(a+i)
в K&R2 написано, что указатели работают быстрее индексации 5.3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2011, 08:32
Помогаю со студенческими работами здесь

Подсчитать сколько гласных букв в строке
Напишите пожалуйста функцию на с++ подсчёт гласных букв. и как потом вызвать эту функцию в main()?

Определить каких букв больше в строке: гласных или согласных и на сколько.
1)Ввести строку А с клавиатуры состоящую из заглавных русских букв. Определить каких букв больше: гласных или согласных и на сколько....

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

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

Посчитать количество гласных букв, согласных букв, цифр и знаков препинания в строке
С клавиатуры введена строка на кирилице. Посчитать количество гласных букв, согласных букв, цифр и знаков препинания в строке. Если...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru