Сформировать новую строку поместив в нее слова исходной строки заключенные в круглые скобки - 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;
}

Объяснение кода листинга программы

  1. В функции getStr() используется scanf() для чтения ввода пользователя и realloc() для динамического выделения памяти под строку.
  2. Функция skipSpace() используется для пропуска пробелов, табов и скобок при чтении ввода.
  3. Функция copyWord() отвечает за копирование слова из исходной строки в новую строку, помещая его в круглые скобки.
  4. Функция reorg() используется для переорганизации исходной строки, заключая слова в круглые скобки.
  5. В основной функции main() используется цикл while, чтобы продолжать считывать строки от пользователя до тех пор, пока они не введут пустую строку.
  6. Каждая введенная строка передается в функцию reorg(), которая возвращает новую строку с словами, заключенными в круглые скобки.
  7. Новая строка затем выводится на экран, а старая строка освобождается с помощью free().
  8. После вывода всех строк, программа заканчивается и возвращает 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы