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

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы со строками и вводом/выводом
  2. Объявление переменной s типа std::string для хранения введенной строки
  3. Вывод сообщения Enter a string и считывание строки с помощью std::getline(std::cin, s)
  4. Создание объекта std::istringstream из переменной s для разбиения строки на слова
  5. Вывод сообщения Result:
  6. Использование цикла while для перебора слов из stream
  7. Внутри цикла слово считывается в переменную s с помощью stream >> s
  8. Проверка наличия одинаковых соседних символов с помощью std::adjacent_find(s.begin(), s.end())
  9. Если такая последовательность найдена, слово выводится на экран с помощью std::cout << s << std::endl;
  10. Конец цикла достигается, когда stream пуст
  11. Завершение программы с помощью _getch() и возврат значения EXIT_SUCCESS

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы