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

0 голосов
57 просмотров

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


Информатика (67 баллов) | 57 просмотров
0

Недаром же написали контейнеры STL

0

Ну можно не динамический, а просто массив char'ов, допустим символов так на 200, а по поводу разделителей, между словами есть пробел, забыл про это сказать

0

В чем проблема просмотреть пары соседей в массиве с позициями разделителей? Разница позиций и есть длина.

0

Без string, это все требует много доп.кода, поэтому удаляю просто заменяя букву на ' '

0

Да вывод я уже через доп. переменную реализовал, у меня сложность возникает именно с поиском длинного слова, а затем удалением средней(средних) букв

0

Чтобы лишних просмотров не делать можно создать массив, куда загнать номера позиций разделителей. Тогда будет легко выбирать слова для вывода.

0

Это правильное решение.

0

Добавил условие, чтобы по поводу разделителей не заморачивались)

0

Нет, я подумал, не хочится в это грустное прошлое окунаться, тут есть юный падаван, который изучает С++ - ему полезно будет.

0

К тому же предложение всегда заканчивается точкой, да и проход можно сделать в цикле, и если (arr[i + 1] = ' ') работать со словами

Дан 1 ответ
0 голосов

Ответ:

#include

#include

#include

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 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++)</p>

                   n = delItem(n,delIndex);

           }

           else

           {

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

           }

       }

       cout<<n<<endl;</p>

   }

   system("PAUSE");

}

Объяснение:


image
(4.0k баллов)
0

Это же вроде как раз таки написано с использованием строк? Поправь если я ошибаюсь. Не силен за паскаль.

0

Давай id

0

вк

0

вк или дискорд?

0

а как с тобой списаться?

0

Могу

0

Привет, можешь помочь программу небольшую написать на С++ пожалуйстаа))

0

Да, конечно. Но в С++ если строки исползовать, код будет куда больше и боле трудночитаем. Это не критика С++, а пояснение, почему С++ - плохой выбор языка для изучения основ информатики в школе.

0

begin
var s := ReadString;
var mx := s.Matches('[^ ,.]+')
.Select(t -> (t.Index, t.Value.Length))
.MaxBy(t->t[1]);
var d := mx[1] div 2;
if mx[1].IsOdd then
Delete(s, mx[0] + d + 1, 1)
else
Delete(s, mx[0] + d, 2);
s.Print
end.

0

Devushka Budapesht'a#2222 дс