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

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

25.02.2015, 23:30. Показов 2250. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru