Попробуйте это для правильной консоли в< /эм> :
int main()
{
int n;
std::cin >> n;
std::cin.ignore(); // fix
/* remaining code */
return 0;
}
> Чтобы найти гласные в строке
Способ поиска гласных в строке заключается в использовании std::binary_search
каждого символа данной строки в таблице гласных.
- Создайте отсортированный массив из
char
всех гласных (т. е. массив гласных).
- Для каждого
char
входной строки std::binary_search
в массиве vowels эм>.
- Если
std::binary_search
возвращает true
(это означает, что char
является гласной), выведите char
строки.
Ниже приведен пример кода! (Посмотреть онлайн)
#include <iostream>
#include <string>
#include <algorithm> // std::for_each, std::binary_search, std::sort
#include <array> // std::array
int main()
{
std::array<char, 10> a{ 'a','e','i','o','u','A','E','I','O','U' };
std::sort(a.begin(), a.end()); // need sorted array for std::binary_search
const std::string str{ "HmlMqPhBfaVokhR wdTSFuI IvfHOSNv" };
std::for_each(str.cbegin(), str.cend(), [&](const char str_char)
{
if (std::binary_search(a.cbegin(), a.cend(), str_char))
std::cout << str_char << " ";
});
return 0;
}
Вывод:
a o u I I O
> Чтобы удалить гласные из строки
Используйте идиому стереть-удалить следующим образом. (до c++ 17†).
- Создайте отсортированный массив из
char
всех гласных (т. е. массив гласных).
- Используя
std::remove_if
, соберите итераторы, указывающие на символы, которые являются гласными. Лямбда-функцию можно использовать в качестве предиката для std::remove_if
, где std::binary_search
используется для проверки наличия char
в строке в массиве гласных.
- Используя
std::string::erase
, сотрите все собранные символы (например, гласные) из нить.
Ниже приведен пример кода! (Посмотреть онлайн)
#include <iostream>
#include <string>
#include <algorithm> // std::sort, std::binary_search, std::remove_if
#include <array> // std::array
int main()
{
std::array<char, 10> a{ 'a','e','i','o','u','A','E','I','O','U' };
std::sort(a.begin(), a.end()); // need sorted array for std::binary_search
std::string str{ "Hello World" };
// lambda(predicate) to check the `char` in the string exist in vowels array
const auto predicate = [&a](const char str_char) -> bool {
return std::binary_search(a.cbegin(), a.cend(), str_char);
};
// collect the vowels
const auto vowelsToRemove = std::remove_if(str.begin(), str.end(), predicate);
// erase the collected vowels using std::string::erase
str.erase(vowelsToRemove, str.end());
std::cout << str << "\n";
return 0;
}
Вывод:
Hll Wrld
† Поскольку c++20 можно использовать std::erase_if
для этого, что будет менее подвержен ошибкам, чем приведенный выше. (Посмотрите онлайн в прямом эфире, используя GCC 9.2)
#include <iostream>
#include <string> // std::string, std::erase_if
#include <array> // std::array
int main()
{
std::array<char, 10> a{ 'a','e','i','o','u','A','E','I','O','U' };
std::sort(a.begin(), a.end()); // need sorted array for std::binary_search
std::string str{ "Hello World" };
// lambda(predicate) to check the `char` in the string exist in vowels array
const auto predicate = [&a](const char str_char) -> bool {
return std::binary_search(a.cbegin(), a.cend(), str_char);
};
std::erase_if(str, predicate); // simply erase
std::cout << str << "\n";
return 0;
}
> Чтобы удалить согласные из строки
Чтобы удалить согласные из данной строки, в приведенном выше predicate
инвертируйте результат std::binary_search
. (Посмотреть в прямом эфире)
const auto predicate = [&a](const char str_char) -> bool {
return !std::binary_search(a.cbegin(), a.cend(), str_char);
// ^^ --> negate the return
};
Как примечания,
person
JeJo
schedule
06.06.2018
<string>
, а не<string.h>
- person 463035818_is_not_a_number   schedule 06.06.2018ignore()
послеcin>>n;
, иначеgetline(cin, str);
ничего не получит. и это не то, что вы должны делать :#include<bits/stdc++.h>
- person JeJo   schedule 06.06.2018remove_consonants
, которая принимаетstring
в качестве параметра и может быть протестирована независимо откуда эта строка) - person 463035818_is_not_a_number   schedule 06.06.2018