В символьной строке оставить только те слова, в которых встречаются подряд идущие одинаковые буквы - 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