Сформировать новую строку поместив в нее слова исходной строки заключенные в круглые скобки - C (СИ)
Формулировка задачи:
Вводится строка,нужно сформировать новую строку поместив в нее слова исходной строки заключенные в круглые скобки. Строка представлена СПИСКОМ!!!
Решение задачи: «Сформировать новую строку поместив в нее слова исходной строки заключенные в круглые скобки»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> char *getStr() { char buf[21]; int n, len = 0, curLen; char *ptr = (char *)malloc(1); *ptr = '\0'; do { n = scanf("%20[^\n]", buf, 21); if(n < 0) { free(ptr); ptr = NULL; continue; } if(n > 0) { curLen = strlen(buf); len += curLen; ptr = (char *)realloc(ptr, len + 1); strcat(ptr, buf); } else scanf("%*c", 0); } while(n > 0); return ptr; } int skipSpace(char *s, int i) { while ((s[i] == ' ') || (s[i] == '\t') || (s[i] == '(')) { i++; } return i; } char *copyWord(char *from, char *to, int i) { int k, t=0, b=0; *to = NULL; while ((from[i] != ')') && (from[i] != '\0')) { k=i; while ((from[i] != ' ') && (from[i] != '\t') && (from[i] != ')')) { t++; i++; } i = k; to = (char *) realloc (to, (b+t+2)); t=b; while ((from[i] != ' ') && (from[i] != '\t') && (from[i] != '\0') && (from[i] != ')') ) { to[t] = from [i]; t++; i++; } to[t] = ' '; b = t+1; t = 0; i = skipSpace(from, i); } to[b]='\0'; return to; } char *reorg(char *s) { int i, l, t; char *p = (char *)malloc(strlen(s)); char *tmp = (char *)malloc(strlen(s)); *tmp = NULL; *p = NULL; for (i=0; s[i] != '\0'; i++) { if (s[i] == '(') { i++; i= skipSpace (s, i); tmp = copyWord (s, tmp, i); strcat (p, tmp); } } free(tmp); return p; } int main() { char *s = NULL, *p = NULL; while (s = getStr()) { printf("Source string: '%s' \n", s); p = reorg(s); printf("Result string: '%s' \n", p); free(s); free(p); } printf("The End"); return 0; }
Объяснение кода листинга программы
- В функции
getStr()
используетсяscanf()
для чтения ввода пользователя иrealloc()
для динамического выделения памяти под строку. - Функция
skipSpace()
используется для пропуска пробелов, табов и скобок при чтении ввода. - Функция
copyWord()
отвечает за копирование слова из исходной строки в новую строку, помещая его в круглые скобки. - Функция
reorg()
используется для переорганизации исходной строки, заключая слова в круглые скобки. - В основной функции
main()
используется циклwhile
, чтобы продолжать считывать строки от пользователя до тех пор, пока они не введут пустую строку. - Каждая введенная строка передается в функцию
reorg()
, которая возвращает новую строку с словами, заключенными в круглые скобки. - Новая строка затем выводится на экран, а старая строка освобождается с помощью
free()
. - После вывода всех строк, программа заканчивается и возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д