Предмет: Информатика, автор: LuckyMan14

Программа нужна на C++, без использования string. Если получится написать код максимально кратко, буду благодарен вдвойне.

Дано предложение. Напечатать все его слова, предварительно преобразовав каждое из них по следующему правилу:

в самом длинном слове удалить среднюю (средние) буквы. Принять, что такое слово — единственное.
В задаче принять, что: в рассматриваемом предложении нет начальных и конечных пробелов и символов "-"; количество слов в предложении не превышает 10.


LuckyMan14: Ну можно не динамический, а просто массив char'ов, допустим символов так на 200, а по поводу разделителей, между словами есть пробел, забыл про это сказать
LuckyMan14: К тому же предложение всегда заканчивается точкой, да и проход можно сделать в цикле, и если (arr[i + 1] = ' ') работать со словами
LuckyMan14: Добавил условие, чтобы по поводу разделителей не заморачивались)
LuckyMan14: Да вывод я уже через доп. переменную реализовал, у меня сложность возникает именно с поиском длинного слова, а затем удалением средней(средних) букв
LuckyMan14: Без string, это все требует много доп.кода, поэтому удаляю просто заменяя букву на ' '

Ответы

Автор ответа: Омскаяптица
1

Ответ:

#include <iostream>

#include <cstring>

#include <list>

using namespace std;

char* delItem(char* str, size_t n)

{

 int len = strlen(str)-n;

 if(len>0)

   memmove(str+n, str+n+1, len);

 return str;

}

int main()

{  

   list <char*> words;

   int maxL = 0;

   char st[] = "fdfd hgf jhgf.jhgf,jytf juyhg1fhgft jhgf hgfhgfh hgfhgf";

   char razd[] = " ,.";

   for (char *p = strtok(st, razd); p != NULL; p = strtok(NULL, razd))

   {

     words.push_back(p);

     if(maxL < strlen(p))

       maxL = strlen(p);

   }

   

   for (char* n : words)

   {

       if(strlen(n) == maxL)

       {

           if(strlen(n)%2 == 0)

           {

               int delIndex = strlen(n)/2-1;

               for(int i=0; i<2; i++)

                   n = delItem(n,delIndex);

           }

           else

           {

               n=delItem(n,int(strlen(n)/2));

           }

       }

       cout<<n<<endl;

   }

   system("PAUSE");

}

Объяснение:

Приложения:

Омскаяптица: Это же вроде как раз таки написано с использованием строк? Поправь если я ошибаюсь. Не силен за паскаль.
esstry: Привет, можешь помочь программу небольшую написать на С++ пожалуйстаа))
Омскаяптица: Могу
esstry: а как с тобой списаться?
Омскаяптица: вк или дискорд?
esstry: вк
Омскаяптица: Давай id
esstry: Devushka Budapesht'a#2222 дс
Похожие вопросы
Предмет: Русский язык, автор: Isfan
Предмет: Алгебра, автор: КатринаХолмс