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

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

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

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

26.09.2011, 19:44. Просмотров 2090. Ответов 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
Каратель
Эксперт С++
6553 / 3973 / 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++
4225 / 2199 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
Сообщений: 71
26.09.2011, 22:44     Посчитать, сколько гласных букв в строке #9
Цитата Сообщение от tashka Посмотреть сообщение
я не в школе учусь,но всё же спасибо большое))
ну да)))ты в колледже))))ай не хорошо списывать наташа))))
Петррр
26.09.2011, 22:47
  #10
 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.
accept
4821 / 3241 / 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++
4225 / 2199 / 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
4821 / 3241 / 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++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2011, 08:12     Посчитать, сколько гласных букв в строке #14
accept, все равно сложность вашего алгоритма O(n^2), а моего O(n). Хоть и много букв, как вы говорите, зато быстрее работает.

Вообще, прежде чем нападать, надо было предложить более приемлимый алгоритм. Выкладываете алгоритм сложностью O(n^2) и думаете, что удивили? Это как сравнение пузырьковой сортировки и сортировки методом подсчета (сложностью O(n)).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2011, 08:13     Посчитать, сколько гласных букв в строке
Еще ссылки по теме:
C++ Вычислить количество гласных букв в строке
Подсчитать количество гласных букв в строке C++
Вывести на экран количество гласных букв в строке C++
Указатели. Вычислить количество гласных букв в строке C++
Строки: подсчитать количество гласных букв в строке C++

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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 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)
Yandex
Объявления
27.09.2011, 08:13     Посчитать, сколько гласных букв в строке
Ответ Создать тему
Опции темы

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