Дана строка, обработать без - 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, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д