Создать из 1 списка слов - два - C (СИ)
Формулировка задачи:
Дано предложение, слова в котором разделены пробелами. Составить из него два предложения по правилу: на первое переписать все четные по порядку слова, а во второй - нечетные.
Пожалуйста, выручите, могу посчитать количество слов, а вот это задание мозг выедает)
Решение задачи: «Создать из 1 списка слов - два»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 256
int main()
{
char str[] = "Coming onto you The hell you got me through What would I have to do to kiss that frown"
" I know whats wrong with you That fucked up part of you Is gonna bury me under ground";
char buf1[N], buf2[N], *odd, *even, *start;
int flag = 0;
start = str;
odd = buf1;
even = buf2;
while(*start){
if(!flag){
while(*start != ' ' && *start)
*odd++ = *start++;
if(*start){
*odd++ = ' ';
start++;
flag = 1;
}
}
else{
while(*start != ' ' && *start)
*even++ = *start++;
if(*start){
*even++ = ' ';
start++;
flag = 0;
}
}
}
*odd = '\0';
*even = '\0';
puts(buf1);
puts(buf2);
return 0;
}
Объяснение кода листинга программы
В этом коде на языке C создаются два списка слов из одного исходного списка.
Список слов представлен в виде строки str. Для удобства работы со строкой, указатель на начало строки start и указатели на текущие позиции в списках odd и even инициализируются значениями start.
Переменная flag инициализируется нулём и используется для переключения между списками.
В основном цикле программы, пока есть символы в строке str, выполняются следующие действия:
- Если
flagравен нулю, то в списокoddдобавляются все символы, которые не являются пробелами, до тех пор, пока не встретится пробел или не закончатся символы в строке. После добавления пробела в списокodd, значениеflagустанавливается в единицу. - Если
flagравен единице, то в списокevenдобавляются все символы, которые не являются пробелами, до тех пор, пока не встретится пробел или не закончатся символы в строке. После добавления пробела в списокeven, значениеflagустанавливается в ноль. После завершения работы основного цикла, указательoddиevenустанавливаются на нулевые символы в их списках, что позволяет добавить в списокoddиevenсимволы, соответствующие последнему пробелу в исходной строке. Затем, в списокoddиevenдобавляется нулевой символ, который является маркером конца строки. Наконец, с помощью функцииputsна экран выводятся спискиoddиeven. Списокoddсодержит слова, которые идут нечётными позициями в исходной строке, а списокevenсодержит слова, которые идут чётными позициями в исходной строке.