Задан текст, заканчивающийся точкой, вывести все слова, которые начинаются и заканчиваются одной и той же буквой (Например: АСТРА, КРИК, РОТОР). Слова отделяются друг от друга пробелами (одним или нескольким).
Определить количество слов, у которых первая их буква больше не встречается в слове.
Другие языки программирования и технологии
C++. Работа с символьными данными. Напишите пожалуйста
Контрольную по комбинаторике я написал на отлично.
#include <iostream>
#include <windows.h>
#include <string>
#include <vector>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "rus");
system("color 0A");
string str;
cout << "Введите текст" << endl;
getline(cin, str);
vector<string> v;
string temp;
bool flag = true;
for (const auto &c : str)
{
if
(
c >= 'a' && c <= 'z' ||
c >= 'A' && c <= 'Z' ||
c >= 'а' && c <= 'п' ||
c >= 'р' && c <= 'я' ||
c >= 'А' && c <= 'П' ||
c >= 'П' && c <= 'Я'
)
{
temp.push_back(c);
flag = true;
}
else if(flag)
{
v.push_back(temp);
temp.clear();
flag = false;
}
}
cout << "Слова начинающиеся и заканчивающиеся на одну и ту же букву" << endl;
auto sum = 0u;
for (const auto &t : v)
{
flag = true;
auto ind = 0u;
for (const auto &c : t)
{
if (toupper(c) == toupper(t[0u]) && ind++ != 0)
{
flag = false;
break;
}
}
if (flag)
{
++sum;
}
if (toupper(t[0u]) == toupper(t[t.size() - 1]))
{
cout << t << endl;
}
}
cout << "Количество слов, в которых первая буква больше не встречается в слове " << sum << endl;
system("pause");
return 0;
}
#include <iostream>
#include <windows.h>
#include <string>
#include <vector>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "rus");
system("color 0A");
string str;
cout << "Введите текст" << endl;
getline(cin, str);
vector<string> v;
string temp;
bool flag = true;
for (const auto &c : str)
{
if
(
c >= 'a' && c <= 'z' ||
c >= 'A' && c <= 'Z' ||
c >= 'а' && c <= 'п' ||
c >= 'р' && c <= 'я' ||
c >= 'А' && c <= 'П' ||
c >= 'П' && c <= 'Я'
)
{
temp.push_back(c);
flag = true;
}
else if(flag)
{
v.push_back(temp);
temp.clear();
flag = false;
}
}
cout << "Слова начинающиеся и заканчивающиеся на одну и ту же букву" << endl;
auto sum = 0u;
for (const auto &t : v)
{
flag = true;
auto ind = 0u;
for (const auto &c : t)
{
if (toupper(c) == toupper(t[0u]) && ind++ != 0)
{
flag = false;
break;
}
}
if (flag)
{
++sum;
}
if (toupper(t[0u]) == toupper(t[t.size() - 1]))
{
cout << t << endl;
}
}
cout << "Количество слов, в которых первая буква больше не встречается в слове " << sum << endl;
system("pause");
return 0;
}
функця strtok разбивает текст на слова. Далее путем проверок и условий делаешь выборку по словам.
Более быстрый способ будет не разбивать текст на отдельные слова, а так как есть конкретное задание, то проверяем текст на наличие пробельного символа. Затем ищем первый графический символ после пробела, проверяем его на предмет буквы и если это буква то записываем значение данного индекса и ищем конец слова, то есть ищем пробел или разделитель. если нашли пробел, то в обратном порядке ищем первую букву, проверяем так ли это дубликат а не тот же самый символ и если это копия, то записываем индекс данного элемента и выводим слово на основании двух индексов - начала и конца. -> идем далее до тех пор пока символ не будет равен в вашем случае "."
Такой алгоритм я думаю будет пошустрее стрток.
PS: алгоритм не работает в отношении первого слова... так как у начала нет пробела и нужно делать проверку определенного рода... если решите воспользоваться этим вариантом.... а так функция strtok впринципе можете загуглить ее, слова она разобьет, а дальше вообще легкотня
Более быстрый способ будет не разбивать текст на отдельные слова, а так как есть конкретное задание, то проверяем текст на наличие пробельного символа. Затем ищем первый графический символ после пробела, проверяем его на предмет буквы и если это буква то записываем значение данного индекса и ищем конец слова, то есть ищем пробел или разделитель. если нашли пробел, то в обратном порядке ищем первую букву, проверяем так ли это дубликат а не тот же самый символ и если это копия, то записываем индекс данного элемента и выводим слово на основании двух индексов - начала и конца. -> идем далее до тех пор пока символ не будет равен в вашем случае "."
Такой алгоритм я думаю будет пошустрее стрток.
PS: алгоритм не работает в отношении первого слова... так как у начала нет пробела и нужно делать проверку определенного рода... если решите воспользоваться этим вариантом.... а так функция strtok впринципе можете загуглить ее, слова она разобьет, а дальше вообще легкотня
Похожие вопросы
- C++ Проверка правильности ввода данных.
- Напишите пожалуйста функцию обмена значений двух переменных на си (не c++) для любого типа данных
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?
- работа с базой данных рабочих
- Подскажите среду для разработки программы для работой с базами данных
- Напишите пожалуйста код на C#
- Напишите пожалуйста программку на C++
- НОК 2-ух чисел - C++ Помогите, люди добрые. Как написать прогу на C++, которая вычисляет НОК двух чисел
- C++ Про выбор типа данных. Int, char и т. д.
- C++. Работа со строковыми массивами.
А у Вас вк есть? Мне нужно было спросить кое что у Вас