Дана строка, обработать без - C (СИ)
Формулировка задачи:
Дана строка, содержащая слова, разделённые разделителями(пробелами, табуляторами),
в начале и конце строки также могут быть разделители. Сформировать новую строку,
состоящую из нечётных слов исходной строки, разделённых 1 пробелом. В начале и
конце строки не должно быть разделителей.
Задание нужно выполнить без использования библиотеки <string.h>,именно в этом и заключается самая главная проблема (
#include<stdio.h> #include<string.h> void Work(char * in,char *out); int main() { for(;;) { char src[80]="",dst[80]=""; printf("Input string, 0-exit: "); gets(src); if (src[0]=='0') break; printf("Source: %s\n",src); Work(src,dst); printf("Result: %s.\n",dst); } return 0; } void Work(char *in,char *out) { int l,i,k=0; char *p,*c; char sym[30]="qwertyuioplkjhgfdsazxcvbnm"; for (i=1,strcat(in," "),c=in+strlen(in);;) { in+= strspn(in, " \t"); if (in==c) break; l=strspn(in,sym); in+=l; if (i%2!=0) { if (i>=2) {strcat(out," ");} strncat(out,in-l,l); } i++; } }
Решение задачи: «Дана строка, обработать без »
textual
Листинг программы
#include <stdio.h> #include <ctype.h> #define BUFLEN 80 int main() { char src[BUFLEN]; char dst[BUFLEN] = {0}; char *ps = src; char *pd = dst; int is_odd = 1; fgets(src, BUFLEN, stdin); while (isspace(*ps)) ++ps; while (*ps) { if (is_odd) { if (pd != dst) *pd++ = ' '; while (!isspace(*ps)) *pd++ = *ps++; is_odd = 0; } else { while (!isspace(*ps)) ++ps; is_odd = 1; } while (isspace(*ps)) ++ps; } fputs(dst, stdout); return 0; }
Объяснение кода листинга программы
- Объявлены две строки: src и dst, каждая из которых имеет длину BUFLEN символов.
- Два указателя, ps и pd, указывают на текущие позиции чтения и записи соответственно.
- Переменная is_odd содержит 1, что означает, что в данный момент мы находимся в нечетном цикле.
- Функция fgets считывает строку из стандартного ввода и сохраняет ее в переменной src.
- Пропускаются начальные пробелы в строке src, пока не будет найдено первое не пробельное значение.
- В цикле происходит чередование записи пробелов и не пробельных символов в строку dst.
- Если is_odd равно 1, то записывается пробел, а затем считывается следующий не пробельный символ.
- Если is_odd равно 0, то записывается следующий не пробельный символ, а затем считывается пробел.
- В конце каждой нечетной ичетной итерации записывается пробел.
- В конце каждой четной ичетной итерации записывается не пробельный символ.
- В конце каждой четной нечетной итерации записывается пробел.
- В конце каждой нечетной нечетной итерации записывается не пробельный символ.
- В конце каждой итерации считывается следующий символ из src.
- В конце каждой итерации, если текущий символ является пробелом, увеличивается значение указателя pd без записи символа.
- В конце каждой итерации, если текущий символ не является пробелом, он записывается в dst.
- После окончания чтения строки, она выводится на стандартный вывод с помощью функции fputs.
- Программа возвращает 0, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д