Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
4 / 4 / 2
Регистрация: 23.12.2013
Сообщений: 135

Вывести все гласные из строки. Необычная ошибка

25.02.2015, 23:30. Показов 2280. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, затуп.

делаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstring>
 
int main()
{
  char str[] = "Police Academy";
  char key[] = "aeiou";
 
  std::cout << "Поиск гласных букв в строке ";
  char * pch = strpbrk (str, key);                            // первый поиск
 
  while (pch != NULL)                                         // пока есть гласные буквы в строке
  {
      std::cout << *pch << " ";                               // печать гласного символа
    pch = strpbrk (pch+1,key);                                // поиск гласных букв
  }
 
  std::cout << "n";
  return 0;
}
работает. получаю

i e a e
Разбиваю на функции.

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
#include <cstdlib>
#include <cstring>
#include <iostream>
 
using namespace std;
 
void getVowel(char first_str[], char return_str[])
{
  char key[] = "aeiou";
 
  cout << "Poisk glasnix bukv v stroke - " << endl;
 
  char * pch = strpbrk (first_str, key);                            // первый поиск
 
  while (pch != NULL)                                         // пока есть гласные буквы в строке
  {
    strcpy(return_str, pch);
    pch = strpbrk (pch+1,key);                         // поиск гласных букв
  }
 
}
 
int main()
{
    char str[] = "Police Academy";
    char re[100];
    getVowel(str, re);
    cout << re;
    return 0;
}
получаю в ответ

emy
Где я дурак?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2015, 23:30
Ответы с готовыми решениями:

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

Строки(Вывести на экран пару предложений. Подсчитать все гласные буквы.)
Вывести на экран пару предложений. Подсчитать все гласные буквы. помогите пожалуста(

Вывести в алфавитном порядке все гласные буквы, входящие в каждое слово строки
Вывести слова,в которых заменить каждую БОЛЬШУЮ БУКВУ ОДНО-ИМЕННОЙ МАЛОЙ; вывести в алфавитном порядке все гласные буквы,входящие в каждое...

6
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
25.02.2015, 23:34
в строке 17
добавьте счетчик и копируйте символы, а не строки
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
25.02.2015, 23:39
Цитата Сообщение от RedDevilHat Посмотреть сообщение
Где я
Способ вывода результата разный. В первом варианте ты копируешь посимвольно на экран, а во втором копируешь целиком строку, причем перезатираешь старый результат. Можно так (чуть подправил твой код):
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
#include <cstdlib>
#include <cstring>
#include <iostream>
 
using namespace std;
 
void getVowel(char * first_str, char * return_str, size_t maxlen)
{
  char key[] = "aeiou";
 
  cout << "Poisk glasnix bukv v stroke - " << endl;
 
  char * pch = strpbrk(first_str, key);                            // первый поиск
 
  size_t i = 0;
  while(pch != NULL && i < maxlen)                                         // пока есть гласные буквы в строке
  {
       return_str[i++] = *pch;
       pch = strpbrk(pch + 1, key);                         // поиск гласных букв
  }
 
}
 
int main()
{
    char str[] = "Police Academy";
    char re[100];
    getVowel(str, re, 100);
    cout << re;
    return 0;
}
1
4 / 4 / 2
Регистрация: 23.12.2013
Сообщений: 135
26.02.2015, 01:50  [ТС]
Ваш код почти работает, выводит один лишний символ, который даж не буква.

Теперь немного жжоского быдлокода, надо отсортировать полученную строку по алфавиту

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
41
void sortingVowel(char * str, char * return_str, size_t maxlen)
{
    size_t i = 0;
    while(str != NULL && i < maxlen)                           // пока есть гласные буквы в строке
    {
        if(str[i++] == 'A' || 'a')
           {
                return_str[0] = 'a';
           }
        else if(str[i++] == 'E' || 'e')
           {
                return_str[1] = 'e';
           }
        else if(str[i++] == 'I' || 'i')
           {
                return_str[2] = 'i';
           }
        else if(str[i++] == 'O' || 'o')
           {
                return_str[3] = 'o';
           }
        else if(str[i++] == 'U' || 'u')
           {
                return_str[4] = 'u';
           }
    }
}
 
int main()
{
    char str[100];
    cout << "Vvedi stroku ";
    cin >> str;
    int m=strlen(str);
    char re[m];
    char re2[m];
    getVowel(str, re, 100);
    sortingVowel(re, re2, 100);
    cout << re2;
    return 0;
}
не работает, на строчку Police Academy в ответ получил
a (а тут должны быть два левых символа(которые даж не буквы))
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
26.02.2015, 02:18
сильно не разбирался в ваших проблемах.
просто заметка:
C++
1
2
3
4
5
6
7
8
9
if(str[i++] == 'A' || 'a') - это всегда тру.
 
наверно хотелось что-то вроде:
if(str[i] == 'A' || str[i++] == 'a')
да и нет необходимости в str[i++] == 'a'
 
кроме того, есть спец функция перевода символа в нижний регистр:
tolower
[url]http://www.cplusplus.com/reference/cctype/tolower/[/url]
0
4 / 4 / 2
Регистрация: 23.12.2013
Сообщений: 135
26.02.2015, 02:52  [ТС]
Ох, чот я разошелся быдлокодить... после исправления на
C++
1
if (str[i++] == 'a')
На строчку Police Academy выводит

5 (знак вверх) (загагулину)
иными словами просто мусор.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
26.02.2015, 09:24
Цитата Сообщение от RedDevilHat Посмотреть сообщение
Ваш код почти работает, выводит один лишний символ, который даж не буква.
Это было тебе домашнее задание. Там ноль надо было дописать в конце (после записи всех найденных символов гласных).


Добавлено через 8 минут
Цитата Сообщение от RedDevilHat Посмотреть сообщение
надо отсортировать полученную строку по алфавиту
Вот тебе набросок на основе предыдущего примера.
Кликните здесь для просмотра всего текста
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
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
void getVowel(char * first_str, char * return_str, size_t maxlen)
{
    char key[] = "aeiouAEIOU";
 
    cout << "Poisk glasnix bukv v stroke - " << endl;
 
    char * pch = strpbrk(first_str, key);    // первый поиск
 
    size_t i = 0;
    while(pch != NULL && i < maxlen)         // пока есть гласные буквы в строке
    {
        return_str[i++] = *pch;
        pch = strpbrk(pch + 1, key);         // поиск гласных букв
    }
    return_str[i] = 0;
    std::sort(&return_str[0], &return_str[i]);
}
 
int main()
{
    char str[] = "Police Academy";
    char re[100];
    getVowel(str, re, sizeof(re) - 1);
    cout << re;
    return 0;
}

Если нужно сортировку свою написать, то пишешь функцию с таким же контрактом, как std::sort, назовем ее my_super_sort, и заменяешь std::sort(&return_str[0], &return_str[i]) на my_super_sort(&return_str[0], &return_str[i]).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2015, 09:24
Помогаю со студенческими работами здесь

в чем ошибка?(вообщем программа должна из введенной строки вывести оттуда только гласные)
вообщем программа должна из введенной строки вывести оттуда только гласные, я сам кое что попробовал но у меня ничего не получилось ...

Посчитать в строке количество русских гласных букв. Вывести все русские гласные буквы строки в алфавитном порядке
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

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

Найти и вывести все гласные буквы
Пожалуйста очень очень надо решить помогите! 1. Для двух чисел Х,У определить, являются ли они корнями уравнения А*P +D*P +C=0 2....

Найти и вывести все гласные буквы
Найти и вывести все гласные буквы ( без повторений ), которые встречаются в самом коротком слове. Решите пожалуйста кому не сложно очень...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru