Преобразовать текст, поменяв местами максимальное и минимальное предложения - C (СИ) (73133)
Формулировка задачи:
Всех с наступившим!!!
Вообщем задание : дан текст Преобразовать его поменяв местами максимальное и минимальное предложения. Предложения начинаються и заканчиваються на одной строке. Нашел схожу тему, но ответ там дан не был, вообщем требуеться помощь.
Вот смог только реализовать нахождение длинны предложений
Не могу сообразить как поменять местами предложения.
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
int main()
{
setlocale(0, "");
char str[] = "Hello.My name is George!I`m living in Germany.What would u like to ask?";
printf(str);
printf("\n\n");
char a[] = ".!?";
char *p = strtok(str, a);
for (int i=1;p!=NULL;i++)
{
strlen(p);
printf("Длинна %d предложения %d\n",i,strlen(p));
p = strtok (NULL, a);
}
_getch();
return 0;
}Решение задачи: «Преобразовать текст, поменяв местами максимальное и минимальное предложения»
textual
Листинг программы
char s[20][50];
char *p = strtok(str, a);
for (int i=1;p!=NULL && i<20;i++)
{
strcpy(s[i-1],p);
p = strtok (NULL, a);
}
Объяснение кода листинга программы
- В начале кода объявляется массив
sразмером 20 на 50 символов, предназначенный для хранения предложений. - Затем в переменную
pзаписывается результат работы функцииstrtok, которая ищет в строкеstrподстроки, разделенные символомa. Функция возвращает указатель на первую найденную подстроку, в данном случае на первое слово в строке. - Далее начинается цикл, который будет выполняться до тех пор, пока
pне станет равнымNULL(что означает, что все подстроки были обработаны) и пока индексiменьше 20 (что означает, что в массивеsеще есть свободные ячейки). - Внутри цикла значение
pкопируется в массивsс индексомi-1(чтобы учесть нумерацию с 1). - Затем
pобновляется, и цикл продолжается. - В конце цикла в
sбудут храниться предложения в обратном порядке.