В символьной строке оставить только те слова, в которых встречаются подряд идущие одинаковые буквы - C (СИ)
Формулировка задачи:
Задача такая: В символьной строке оставить только те слова, в которых встречаются подряд идущие одинаковые буквы
есть уже готовая программа:
Но она работает с использованием вспомогательной строки.
Подскажите, пожалуйста, как можно по другому написать программу (или переделать эту), чтобы она исполняла ту же задачу, но не использовала вспомогательную строку.
#include <stdio.h> #include <string.h> int main(void) { int i = 0, j = 0; int pos = 0; char strInput[] = "AA LLUDI 4ASTO SSORYATSYA SSORYATSYA."; char strNew[255] = ""; while (strInput[i] != '\0') { if (strInput[i] == ' ') pos = ++i; if (strInput[i] == strInput[i+1]) { while ((strInput[pos] != ' ') && (strInput[pos] != '.')) { strNew[j] = strInput[pos]; pos++; j++; } strNew[j] = ' '; j++; } i++; } printf("%s\n", strNew); return 0; }
Решение задачи: «В символьной строке оставить только те слова, в которых встречаются подряд идущие одинаковые буквы»
textual
Листинг программы
#include <string> #include <iostream> #include <algorithm> #include <cstdlib> #include <sstream> #include <conio.h> int main() { std::string s; std::cout << "Enter a string" << std::endl; std::getline(std::cin, s); std::istringstream stream(s); std::cout << "Result:" << std::endl; while (stream) { stream >> s; if (std::adjacent_find(s.begin(), s.end()) != s.end()) std::cout << s << std::endl; } _getch(); return EXIT_SUCCESS; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками и вводом/выводом
- Объявление переменной
s
типаstd::string
для хранения введенной строки - Вывод сообщения
Enter a string
и считывание строки с помощьюstd::getline(std::cin, s)
- Создание объекта
std::istringstream
из переменнойs
для разбиения строки на слова - Вывод сообщения
Result:
- Использование цикла
while
для перебора слов изstream
- Внутри цикла слово считывается в переменную
s
с помощьюstream >> s
- Проверка наличия одинаковых соседних символов с помощью
std::adjacent_find(s.begin(), s.end())
- Если такая последовательность найдена, слово выводится на экран с помощью
std::cout << s << std::endl;
- Конец цикла достигается, когда
stream
пуст - Завершение программы с помощью
_getch()
и возврат значенияEXIT_SUCCESS
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д