Программа нужна на C++, без использования string. Если получится написать код максимально кратко, буду благодарен вдвойне.
Дано предложение. Напечатать все его слова, предварительно преобразовав каждое из них по следующему правилу:
в самом длинном слове удалить среднюю (средние) буквы. Принять, что такое слово — единственное.
В задаче принять, что: в рассматриваемом предложении нет начальных и конечных пробелов и символов "-"; количество слов в предложении не превышает 10.
Answers & Comments
Ответ:
#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");
}
Объяснение: