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

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

26.09.2011, 19:44. Показов 5276. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru