Перевернуть каждое четное слово, сохранив неизменным их порядок в строке - C (СИ)
Формулировка задачи:
Введена строка символов. «Перевернуть» каждое четное слово, сохранив неизменным их порядок в строке.
Решение задачи: «Перевернуть каждое четное слово, сохранив неизменным их порядок в строке»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
char * reverse(char * str)
{
char * head = str, * tail = str + strlen(str) - 1, tmp;
while ( head < tail )
{
tmp = *head;
*head = *tail;
*tail = tmp;
++head;
--tail;
}
return str;
}
#define DELIM " \t\n"
int main(void)
{
char buf[BUFSIZ], * p, cnt;
if ( *buf != '\n' )
printf("String: ");
fgets(buf, BUFSIZ, stdin);
printf("Result: ");
for ( cnt = 0, p = strtok(buf, DELIM); p && ++cnt; p = strtok(NULL, DELIM) )
printf("%s ", ( cnt & 1 ) ? p : reverse(p));
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы для работы с памятью и строками.
- Определяется функция reverse, которая переворачивает строку, сохраняя порядок слов.
- В функции main считывается строка из стандартного ввода с помощью fgets.
- С помощью цикла for и функции strtok происходит разбиение строки на слова и их переворот с помощью reverse.
- Каждое слово выводится на экран с помощью printf.
- В конце программы возвращается 0, что означает успешный конец работы программы.