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

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

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

привет))
ребята помогите пожалуйста немогу разобраться вот задачкинужно написать только на С а не на С# или С++) задача 1 Дана непустая строка S.Посчитать, сколько гласных букв в строке.
задача2 Выяснить все ли буквы слова Х, стоящие на нечётных местах различны
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2011, 19:44
Ответы с готовыми решениями:

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

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

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

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

45
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.09.2011, 20:05 2
Цитата Сообщение от 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
Эксперт С++
4254 / 2228 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2011, 20:16 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Оба задания:

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
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:32  [ТС] 4
спасибо))
а можно узнать fgets, unsigned vowel ,stdin что означают ??
0
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.09.2011, 20:39 5
Цитата Сообщение от tashka Посмотреть сообщение
vowel
это переменная(английский словарик в руки, ага)
Цитата Сообщение от tashka Посмотреть сообщение
unsigned
тип данных - беззнаковое целое

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

Добавлено через 31 секунду
Цитата Сообщение от tashka Посмотреть сообщение
fgets
http://www.cplusplus.com/refer... dio/fgets/
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:49  [ТС] 6
)) извини ,а можно как нибудь заменить попроще
unsigned
stdin
fgets
просто я новичок в С,мы такие функции не проходили())
0
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.09.2011, 20:53 7
Цитата Сообщение от tashka Посмотреть сообщение
мы такие функции не проходили())
эм... у нас вообще-то Болонский процесс и самообучение в ВУЗах, не в школе уже, книжку по Си откройте чтоли
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:54  [ТС] 8
я не в школе учусь,но всё же спасибо большое))
0
236 / 28 / 18
Регистрация: 08.05.2011
Сообщений: 184
26.09.2011, 22:44 9
Цитата Сообщение от tashka Посмотреть сообщение
я не в школе учусь,но всё же спасибо большое))
ну да)))ты в колледже))))ай не хорошо списывать наташа))))
0
Петррр
26.09.2011, 22:47
  #10
 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.
1
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
27.09.2011, 07:41 11
Цитата Сообщение от 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;
}
Код
[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
Эксперт С++
4254 / 2228 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 07:46 12
accept, буква - элемент языка. Поэтому можно считать, что ASCII символы - буквы. В математике именно такие понятия. Нужны были уточнения какие именно буквы нужны. Плюс к тому мой алгоритм реализует только один проход по строке s. Можно в проверку добавить isalpha:
C
1
2
if (isalpha(s[i]))
   chars[s[i]]++;
но, думаю, это и так очевидно.
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
27.09.2011, 07:51 13
Цитата Сообщение от 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;
}
Код
[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
Эксперт С++
4254 / 2228 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:12 14
accept, все равно сложность вашего алгоритма O(n^2), а моего O(n). Хоть и много букв, как вы говорите, зато быстрее работает.

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

Цитата Сообщение от Thinker
надо было предложить более приемлимый алгоритм
так я предложил, просто не думал о сложности
меня раздразило, что функция расчитана на короткие строки, вызывает strlen(), без которой можно обойтись, создаёт flag, которая не нужна, и вообще небрежно написана (типа скобки if (!(s[0])), в одной части return 0, в другой - какой-то flag, где так же мог бы быть return)
0
Эксперт С++
4254 / 2228 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:22 16
Цитата Сообщение от 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
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
27.09.2011, 08:25 17
Цитата Сообщение от Thinker
Моя цель была создать быстрый алгоритм.
strlen(), индексация

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

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

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

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

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

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

Цитата Сообщение от Thinker
А вы в курсе, что при компиляции происходит замена выражений типа a[i] на *(a+i)
в K&R2 написано, что указатели работают быстрее индексации 5.3
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2011, 08:32

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

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

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

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

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


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

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

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