Вопрос задан 11.07.2023 в 07:54. Предмет Информатика. Спрашивает Бойко Данил.

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

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

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Усманов Данис.

Ответ:

#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");

}

Объяснение:


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно, вот программа на C++, которая выполняет указанные действия:

cpp
#include <iostream> #include <cstring> int main() { char sentence[100]; std::cout << "Введите предложение: "; std::cin.getline(sentence, sizeof(sentence)); char *words[10]; int wordCount = 0; // Разбиение предложения на слова char *token = strtok(sentence, " "); while (token != nullptr && wordCount < 10) { words[wordCount++] = token; token = strtok(nullptr, " "); } // Нахождение самого длинного слова int maxLength = 0; char *longestWord = nullptr; for (int i = 0; i < wordCount; ++i) { int length = strlen(words[i]); if (length > maxLength) { maxLength = length; longestWord = words[i]; } } // Удаление средних букв из самого длинного слова int midIndex = maxLength / 2; if (maxLength % 2 == 0) { // Если длина четная, удаляем две средние буквы memmove(longestWord + midIndex, longestWord + midIndex + 2, maxLength - midIndex); } else { // Если длина нечетная, удаляем одну среднюю букву memmove(longestWord + midIndex, longestWord + midIndex + 1, maxLength - midIndex); } // Вывод преобразованных слов for (int i = 0; i < wordCount; ++i) { std::cout << words[i] << " "; } return 0; }

Примечание:

  1. В программе предполагается, что ввод не будет содержать символов "-" и начальных/конечных пробелов.
  2. Программа использует функции из библиотеки <cstring>, такие как strtok, strlen и memmove, для работы со строками без использования std::string.
  3. Пожалуйста, учтите, что данная программа не обрабатывает ситуации, когда в самом длинном слове всего одна или две буквы, так как в этом случае у нас не останется символов после удаления средних букв.
0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос