Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
#1

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

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

привет))
ребята помогите пожалуйста немогу разобраться вот задачкинужно написать только на С а не на С# или С++) задача 1 Дана непустая строка S.Посчитать, сколько гласных букв в строке.
задача2 Выяснить все ли буквы слова Х, стоящие на нечётных местах различны
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2011, 19:44     Посчитать, сколько гласных букв в строке
Посмотрите здесь:

Найти сколько гласных букв в строке C++
Подсчитать сколько гласных букв в строке C++
C++ Определить каких букв больше в строке: гласных или согласных и на сколько.
Строки: подсчитать количество гласных букв в строке C++
Определить сколько в предложении гласных букв C++
Посчитать сколько в текстовом файле гласных C++
C++ Посчитать сколько в фамилии гласных букв
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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;
}
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 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;
}
tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:32  [ТС]     Посчитать, сколько гласных букв в строке #4
спасибо))
а можно узнать fgets, unsigned vowel ,stdin что означают ??
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.09.2011, 20:39     Посчитать, сколько гласных букв в строке #5
Цитата Сообщение от tashka Посмотреть сообщение
vowel
это переменная(английский словарик в руки, ага)
Цитата Сообщение от tashka Посмотреть сообщение
unsigned
тип данных - беззнаковое целое

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

Добавлено через 31 секунду
Цитата Сообщение от tashka Посмотреть сообщение
fgets
http://www.cplusplus.com/reference/c.../cstdio/fgets/
tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:49  [ТС]     Посчитать, сколько гласных букв в строке #6
)) извини ,а можно как нибудь заменить попроще
unsigned
stdin
fgets
просто я новичок в С,мы такие функции не проходили())
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.09.2011, 20:53     Посчитать, сколько гласных букв в строке #7
Цитата Сообщение от tashka Посмотреть сообщение
мы такие функции не проходили())
эм... у нас вообще-то Болонский процесс и самообучение в ВУЗах, не в школе уже, книжку по Си откройте чтоли
tashka
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 19
26.09.2011, 20:54  [ТС]     Посчитать, сколько гласных букв в строке #8
я не в школе учусь,но всё же спасибо большое))
hodas4
196 / 2 / 1
Регистрация: 08.05.2011
Сообщений: 65
26.09.2011, 22:44     Посчитать, сколько гласных букв в строке #9
Цитата Сообщение от tashka Посмотреть сообщение
я не в школе учусь,но всё же спасибо большое))
ну да)))ты в колледже))))ай не хорошо списывать наташа))))
Петррр
26.09.2011, 22:47
  #10
 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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]$
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 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]]++;
но, думаю, это и так очевидно.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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]$

поменял название функции на "проверить, что нечётные буквы не равны"
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:12     Посчитать, сколько гласных букв в строке #14
accept, все равно сложность вашего алгоритма O(n^2), а моего O(n). Хоть и много букв, как вы говорите, зато быстрее работает.

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

Цитата Сообщение от Thinker
надо было предложить более приемлимый алгоритм
так я предложил, просто не думал о сложности
меня раздразило, что функция расчитана на короткие строки, вызывает strlen(), без которой можно обойтись, создаёт flag, которая не нужна, и вообще небрежно написана (типа скобки if (!(s[0])), в одной части return 0, в другой - какой-то flag, где так же мог бы быть return)
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 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 Посмотреть сообщение
меня раздразило, что функция расчитана на короткие строки
Это с чего вы решили?
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.09.2011, 08:25     Посчитать, сколько гласных букв в строке #17
Цитата Сообщение от Thinker
Моя цель была создать быстрый алгоритм.
strlen(), индексация

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

Цитата Сообщение от Thinker
Это с чего вы решили?
len имеет тип int, а он может быть равен short int
указатели снимают ограничение длины, быстрее индексации
Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
27.09.2011, 08:26     Посчитать, сколько гласных букв в строке #18
ЭЭЭ, я не понял? Тут что идет олимпиада по лучшему алгоритму и быстрому коду?
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 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 Посмотреть сообщение
ЭЭЭ, я не понял? Тут что идет олимпиада по лучшему алгоритму и быстрому коду?
Конечно, быстрые алгоритмы очень важны!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2011, 08:32     Посчитать, сколько гласных букв в строке
Еще ссылки по теме:

C++ Вычислить количество гласных букв в строке
Указатели. Вычислить количество гласных букв в строке C++
C++ Подсчитать сколько гласных букв в строке
Вывести на экран количество гласных букв в строке C++
Подсчитать количество гласных букв в строке C++

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

Или воспользуйтесь поиском по форуму:
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.09.2011, 08:32     Посчитать, сколько гласных букв в строке #20
Цитата Сообщение от Thinker
Потому что нужны нечетные позиции в задаче
s[0] - нечётная позиция

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

Цитата Сообщение от Thinker
А вы в курсе, что при компиляции происходит замена выражений типа a[i] на *(a+i)
в K&R2 написано, что указатели работают быстрее индексации 5.3
Yandex
Объявления
27.09.2011, 08:32     Посчитать, сколько гласных букв в строке
Ответ Создать тему
Опции темы

Текущее время: 10:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru