подсчитать количество гласных и согласных букв в строке string VOZ = "Аллаху акбар. Ахмат сила";
своего решения к сожалению нет. Помогите люди добрые
C/C++
Алгоритмы STL. Решение оформить в виде class c конструктором, принимающим строку
#include <iostream>
#include <Windows.h>
using namespace std;
class GSA
{
uint16_t glas{}, soglas{};
int16_t gla_sogla(unsigned char ch)
{
static char anci[256]{};
static bool is_first = true;
if (is_first)
{
const string c_glas = "АаУуОоЫыЭэЯяЮюЁёИиЕе";
const string c_sogl = "БбВвГгДдЖжЗзЙйКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ";
uint16_t i = 0;
for (i = 0; i < 256; i++)
{
if (c_glas.find(i) != string::npos) anci[i] = 1; else
if (c_sogl.find(i) != string::npos) anci[i] = -1;
}
is_first = false;
}
return anci[ch];
}
public:
GSA(const string& str)
{
for (auto& i : str)
{
if (gla_sogla(i) == 1) glas++; else
if (gla_sogla(i) == -1) soglas++;
}
}
const pair<uint16_t, uint16_t> get_result() const
{
return { glas, soglas };
}
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
GSA temp("Баобаб Крит ++"); // Или вводите свою строку
cout << "Гласные: " << temp.get_result().first << " Согласные: " << temp.get_result().second;
}
#include <Windows.h>
using namespace std;
class GSA
{
uint16_t glas{}, soglas{};
int16_t gla_sogla(unsigned char ch)
{
static char anci[256]{};
static bool is_first = true;
if (is_first)
{
const string c_glas = "АаУуОоЫыЭэЯяЮюЁёИиЕе";
const string c_sogl = "БбВвГгДдЖжЗзЙйКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ";
uint16_t i = 0;
for (i = 0; i < 256; i++)
{
if (c_glas.find(i) != string::npos) anci[i] = 1; else
if (c_sogl.find(i) != string::npos) anci[i] = -1;
}
is_first = false;
}
return anci[ch];
}
public:
GSA(const string& str)
{
for (auto& i : str)
{
if (gla_sogla(i) == 1) glas++; else
if (gla_sogla(i) == -1) soglas++;
}
}
const pair<uint16_t, uint16_t> get_result() const
{
return { glas, soglas };
}
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
GSA temp("Баобаб Крит ++"); // Или вводите свою строку
cout << "Гласные: " << temp.get_result().first << " Согласные: " << temp.get_result().second;
}
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
class Letters {
public:
static size_t vowels(const string& line) {
return count_if(line.begin(), line.end(), Vowel());
}
static size_t consonants(const string& line) {
return count_if(line.begin(), line.end(), Consonant());
}
private:
inline static const string vow{ "оеаиуяыюэОЕАИУЯЫЮЭёЁ" };
inline static const string con{ "нтсрвлкмдпьгзбчйхжшцщфъНТСРВЛКМДПГЗБЧХЖШЦЩФЙЬЪ" };
struct Vowel {
bool operator()(char ch) {
return vow.find(ch) != string::npos;
}
};
struct Consonant {
bool operator()(char ch) {
return con.find(ch) != string::npos;
}
};
};
int main() {
system("chcp 1251 > nul");
cout << "Введите строку: ";
string line;
getline(cin, line);
const auto vowels = Letters::vowels(line);
const auto consonants = Letters::consonants(line);
cout << "Гласных: " << vowels << '\n';
cout << "Согласных: " << consonants << '\n';
system("pause > nul");
}
#include <iostream>
#include <string>
using namespace std;
class Letters {
public:
static size_t vowels(const string& line) {
return count_if(line.begin(), line.end(), Vowel());
}
static size_t consonants(const string& line) {
return count_if(line.begin(), line.end(), Consonant());
}
private:
inline static const string vow{ "оеаиуяыюэОЕАИУЯЫЮЭёЁ" };
inline static const string con{ "нтсрвлкмдпьгзбчйхжшцщфъНТСРВЛКМДПГЗБЧХЖШЦЩФЙЬЪ" };
struct Vowel {
bool operator()(char ch) {
return vow.find(ch) != string::npos;
}
};
struct Consonant {
bool operator()(char ch) {
return con.find(ch) != string::npos;
}
};
};
int main() {
system("chcp 1251 > nul");
cout << "Введите строку: ";
string line;
getline(cin, line);
const auto vowels = Letters::vowels(line);
const auto consonants = Letters::consonants(line);
cout << "Гласных: " << vowels << '\n';
cout << "Согласных: " << consonants << '\n';
system("pause > nul");
}
Похожие вопросы
- Алгоритмы STL, sort, первичный и вторичный ключи для сортировки.
- Как решить ошибку C2079 использует не имеющую определения структуру class C++
- C++: "С-Строка" и ошибка
- Написать алгоритм для решения примера №3 и 4
- Программирование C++. Задание на строки и символы
- C++ Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции bool
- Написать кусочек С++Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции
- Алгоритм Евклида C++
- Написать программу на C++.Создать класс vector3d, задаваемый тройкой координат. Создать конструктор...
- C++ STL. Проверить и удалить (по необходимости)
для 100 проходов с миллионной строкой 5 секунд против 2-х.
Я вначале смутился, ибо без вывода результата ваша программа в релизе оптимизируется до нуля и говорит затрачено 0 секунд. Хехехе
Для только гласных у вас 1.5, для только согласных 3.1
Выходит вы за Гласность!
А именно убрал заполнение массива в отдельную функцию, сам массив запихнул в статик член, функцию прописал как
inline int16_t gla_sogla(unsigned char ch)
{
return *anci+ch;
}
Оказывается что проверка запущена ли функция первый раз дорого стоила...