Напишите программу, которая считывает с клавиатуры некоторый текст произвольный длины. Далее запрашивает ввод слова, которое должно быть заменено в тексте на столько звездочек, сколько символов в слове. Заменяются только целые слова. Причем надо заменить все вхождения слова вне зависимости от его регистра. Затем выведите на консоль полученную новую строку.
#include <iostream> #include <string> int main() { std::string text; // исходный текст std::string word; // слово, которое надо заменить std::cout << "Enter some text:\n"; // вводим текст std::getline(std::cin, text); std::cout << "\nEnter the word to be replaced: "; // вводим слово для замены std::cin >> word; std::string lower_word; // конвертируем слово в нижний регистр for (char ch : word) { lower_word += std::tolower(ch); } const std::string separators {" ,;:.\"!?'\n"}; // разделители слова size_t start {text.find_first_not_of(separators)}; //Находим индекс начала слова while (start != std::string::npos) { auto end{ text.find_first_of(separators, start + 1) }; // находим завершение слова // если разделитель не найден, например, после слова в тексте больше нет разделителей if (end == std::string::npos) { end = text.length(); } // сравниваем длину слова для замены и найденного слова в тексте if (end - start == word.length()) { bool is_same_word{ true }; // если длина слов совпадает, то устанавливаем флаг замены for (size_t i {start}; i < end; i++) { if (lower_word[i - start] != std::tolower(text[i])) // Если символы различаются { is_same_word = false; // сбрасываем флаг замены break; } } if (is_same_word) // Если текущее слово текста представляет слово для замены { for (size_t i {start}; i < end; i++) // заменяем звездочками { text[i] = '*'; } } } start = text.find_first_not_of(separators, end + 1); // находим начало следующего символа } std::cout << std::endl << text << std::endl; }
Пример работы программы:
Enter some text: A Friend in need is a friend indeed. Enter the word to be replaced: friend A ****** in need is a ****** indeed.
Напишите программу, которая запрашивает ввод двух слов и определяет, является ли одно из них анаграммой другого. Анаграмма слова образована перестановкой его букв. Например, "воз" и "зов" или "все" и "сев".
#include <iostream> #include <string> int main() { std::string word1, word2; std::cout << "Enter the first word: "; std::cin >> word1; std::cout << "Enter the second word: "; std::cin >> word2; // Проверяем, равны ли их длины, т.к. если не равны, то дальше проверять нет смысла if (word1.length() != word2.length()) { std::cout << word1 << " and " << word2 << " are not anagrams" << std::endl; return 0; } // общий алгоритм определения анаграммы - проходим по всем символам первого слова // и удаляем эти символы из второго // если после прохода всем символам первого слова во втором слове еще останутся какие-то символы // то оба слова содержат разный набор слов и соотвественно анаграммами не являются // чтобы не затронуть исходную строку, копируем ее std::string word2_copy {word2}; // проходим по всем символам слова word1 for (char c : word1) { // проходим по всем символам слова word2 for (size_t i {}; i < word2_copy.length(); ++i) { // если символы обоих слов равны if (std::tolower(word2_copy[i]) == std::tolower(c)) { // удаляем символ из word2 word2_copy.erase(i, 1); break; } } } // если второе слово - пустая строка, то слова - анаграммы if(word2_copy.empty()) { std::cout << word1 << " and " << word2 << " are anagrams" << std::endl; } else { std::cout << word1 << " and " << word2 << " are not anagrams" << std::endl; } }
Пример работы программы:
c:\cpp>g++ hello.cpp -o hello & hello Enter the first word: listen Enter the second word: silent listen and silent are anagrams c:\cpp>g++ hello.cpp -o hello & hello Enter the first word: listen Enter the second word: lent listen and lent are not anagrams
Напишите программу, которая считывает с консоли текст. Далее программа считывает с консоли символ и находит в тексте все слова, которые начинаются с этого символа (не важно в каком регистре). В конце на консоль выводится список всех этих слов.
#include <iostream> #include <string> #include <vector> int main() { std::string text; // исходный текст char ch; // символ для поиска std::cout << "Enter a text: "; std::getline(std::cin, text); // вводим текст std::cout << "\nEnter a char: "; std::cin >> ch; // вводим символ const std::string separators {" ,;:.\"!?'\n"}; // разделители слов std::vector<std::string> words; // вектор для хранения найденных слов size_t start {text.find_first_not_of(separators)}; // Индекс первого найденного слова // прохоим по всем словам while (start != std::string::npos) { auto end{ text.find_first_of(separators, start + 1) }; // находим конец слова if (end == std::string::npos) // если разделители не найдены { end = text.length(); } auto word{ text.substr(start, end - start) }; // Получаем найденное слово if (std::toupper(word[0]) == std::toupper(ch)) // Если слово начинается с введенного символа { words.push_back(word); // добавляем слово в вектор } start = text.find_first_not_of(separators, end + 1); // получаем начальный индекс следующего слова } // вывод слов std::cout << "\nWords beginning with '" << ch << "' are:\n"; for (auto& word : words) { std::cout << word << std::endl; } }
Пример работы программы:
Enter a text: A friend in need is a friend indeed. Enter a char: i Words beginning with 'i' are: in is indeed