Отформатировать файл с программой на языке С - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача: Отформатировать файл с программой на языке С. Проблема: не могу понять, как нормально отформатировать switch ( проблема с табуляциями после case ) функции:
#include "Header.h"
int init_mas_format(FILE* res, char* str, int i)
{
    fprintf(res, " ");
    while (str[i - 1] != '}')
    {
        if (str[i - 1] == ',')
        {
            fprintf(res, " ");
        }
        fprintf(res, "%c", str[i]);
        i++;
    }
    return i;
}

int for_format(FILE* res, char * str, int i)
{
    while (str[i + 1] != '{')
    {
        fprintf(res, "%c", str[i]);
        i++;
        if (str[i - 1] == 'r' && str[i - 2] == 'o' && str[i - 3] == 'f' && str[i] != ' ')
        {
            fprintf(res, " ");
        }
        if (str[i] == ' ' && str[i + 1] == ';')
        {
            fprintf(res, ";");
            i = i + 2;
        }
        if (str[i] == ' ' && ((str[i + 1] == '+' && str[i + 2] == '+') || (str[i + 1] == '-' && str[i + 2] == '-')))
        {
            fprintf(res, "%c%c", str[i + 1], str[i + 2]);
            i = i + 3;
        }
        if ((str[i - 1] == '>' || str[i - 1] == '<') && str[i] == ' '  && str[i + 1] == '=')
        {
            fprintf(res, "%c", str[i + 1]);
            i = i + 2;
        }
        if (((str[i - 1] == '='&& str[i] != '=') || (str[i] == '&' && str[i + 1] == '&' && str[i - 1] != ' ') || (str[i - 1] == '&' && str[i] != ' ' && str[i] != '&') || (str[i] == '&' && str[i - 1] != '&' && str[i - 1] != ' ') || (str[i] == '='&& str[i - 1] != '=' && str[i - 1] != '!' && str[i - 1] != ' ' &&  str[i - 1] != '>' && str[i - 1] != '<' && str[i - 1] != '*') || (str[i - 1] == '+' && str[i] != '+' && str[i + 1] != '{') || (str[i] == '+' && str[i - 1] != '+' && str[i + 1] != '+' &&str[i - 1] != ' ' && str[i - 1] != '\'') || (str[i - 1] == '-' && str[i] != '-') || (str[i] == '-' && str[i - 1] != '-' && str[i + 1] != '-' &&  str[i - 1] != ' ' && str[i - 1] != '\'') || str[i - 1] == '*' || (str[i - 1] == '&' && str[i - 2] == '&') || (str[i] == '&' && str[i + 1] == '&') || (str[i] == '|' && str[i + 1] == '|') || (str[i - 1] == '|' && str[i] == '|') || str[i] == '*' || (str[i - 1] == '/') || (str[i] == '/' && str[i - 1] != ' ') || str[i - 1] == '%' || ((str[i - 1] == '<' || str[i - 1] == '>') && str[i] != '\'' && str[i] != '=') || ((str[i] == '>' || str[i] == '<') && str[i - 1] != ' ' && str[i - 1] != '\'') || str[i - 1] == ',' || str[i - 1] == ';' || (str[i - 1] == '(' && str[i] != ')') || (str[i] == ')' && str[i - 1] != ' ' && str[i - 1] != '(' &&str[i + 1] != '{') || (str[i] == '!' && str[i - 1] != ' ')) && str[i] != ' ')
        {
            fprintf(res, " ");
        }
    }
    return i;
}

void read(FILE* f, char* str, int size)
{
 
    int i = 0;
    int j = 0;
    char *mas = (char*)malloc(size * sizeof(char));
    while (fgets(mas, size, f) != NULL)
    {
        j = 0;
 
        while (mas[j] != '\0')
        {
            if (mas[j] == '"' && mas[j - 1] != '\'')
            {
                while (mas[j + 1] != '"')
                {
                    str[i] = mas[j];
                    i++;
                    j++;
                }
                str[i] = mas[j];
                i++;
                j++;
            }
            
            if (mas[j] != '\t' )
            {
                
                str[i] = mas[j];
                if (i > 0)
                {
                    if (str[i] == ' ')
                    {
                        if ((str[i - 1] >= 'A' && str[i - 1] <= 'Z') || (str[i - 1] >= 'a' && str[i - 1] <= 'z') || (str[i - 1] == ']'))
                        {
                            i++;
                        }
                    }
                    else i++;
                }
                else i++;
            }
            j++;
        }
        j++;
    }
    str[i] = NULL;
    free(mas);
}

void format(char * str, int size)
{
    int count = 0;
    int i = 0;
    int j = 0;
    FILE* res = fopen("result.txt", "w");
    if (res == NULL) perror("Ошибка открытия файла");
    else
    {
        while (str[i] != NULL)
        {
            
            if (str[i] == '"' && str[i + 1] != '\'')
            {
                if (str[i - 1] == '(' || str[i-1] == ',' || str[i-1] == '=')
                {
                    fprintf(res, " ");
                }
                fprintf(res, "%c", str[i]);
                i++;
                while (str[i] != '"')
                {
                    fprintf(res, "%c", str[i]);
                    i++;
                }
                
            }
            if (str[i - 1] == '=' && str[i] == '{')
            {
                i = init_mas_format(res, str, i);
            }

            /* ////////////////////////////////////     /            /            /*/
            if (str[i - 1] == ';' && str[i] != '\'' && str[i] != '\n')
            {
                fprintf(res, "\n");
                for (j = 0; j < count; j++)
                {
                    fprintf(res, "\t");
                }
            }
            if (str[i - 1] == '\n' && str[i] != '}')
            {
                for (j = 0; j < count; j++)
                {
                    fprintf(res, "\t");
                }
            }
            else
            {
                if (str[i - 1] == '{' && str[i] != '\'' && str[i] !='}' && str[i+1] !='}' && str[i-2] != '=')
                {
                    count++;
                    if (str[i] != '\n')
                    {
                        fprintf(res, "\n");
                        for (j = 0; j < count; j++)
                        {
                            fprintf(res, "\t");
                        }
                    }
                    else
                    {
                        for (j = 0; j < count; j++)
                        {
                            fprintf(res, "\t");
                        }
                    }
                }
                else if (str[i] == '}' && str[i - 1] != '\'' && str[i-1] != '{' )
                {
                    count--;
                    
                    if (str[i-1] != '\n')
                    {
                        fprintf(res, "\n");
                        for (j = 0; j < count; j++)
                        {
                            fprintf(res, "\t");
                        }
                    }
                    else
                    {
                        for (j = 0; j < count; j++)
                        {
                            fprintf(res, "\t");
                        }
                    }
                    fprintf(res, "%c", str[i]);
                    i++;
                }
                if (str[i] == '{' && str[i - 1] != '\n' && str[i-1] !='\'' && str[i+1] != '}')
                {
                    fprintf(res, "\n");
                    for (j = 0; j < count; j++)
                    {
                        fprintf(res, "\t");
                    }
                }
            }
            /*   ////////////////////////////////////////////         /           /          /             */
            if (i > 0)
            {
                if (str[i - 1] == '\'' && str[i] == '\'' && str[i - 2] != '\\')
                {
                    fprintf(res, " ");
                }
                if ((str[i] == ' ' && (str[i + 1] == ',' || str[i + 1] == ']')))
                {
                    fprintf(res, "%c", str[i + 1]);
                    i = i + 2;
                }
                if (str[i - 1] == '&' && str[i - 2] != '&' && str[i] != '\'')
                {
                    fprintf(res, "%c", str[i]);
                    i++;
                }
                if ((str[i] == ' ' && str[i + 1] == '-' && str[i + 2] == '>') || (((str[i + 1] == '+' && str[i + 2] == '+') || (str[i + 1] == '-' && str[i + 2] == '-'))))
                {
                    if (str[i] != ' ')
                    {
                        fprintf(res, "%c%c%c", str[i],str[i + 1], str[i + 2]);
                        i = i + 3;
                    }
                    else
                    {
                        fprintf(res, "%c%c", str[i + 1], str[i + 2]);
                        i = i + 3;
                    }
                }
                if (str[i] == 'f' && str[i + 1] == 'o' && str[i + 2] == 'r' && ((str[i + 3] == '(') || ((str[i + 4] == '(') && str[i + 3] == ' ')))
                {
                    i = for_format(res, str, i);
 
                }
 
                if (((str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '!' || str[i] == '>' || str[i] == '<')) && str[i + 1] == '=')
                {
                    if (str[i - 1] != ' ')
                    {
                        fprintf(res, " ");
                    }
                    fprintf(res, "%c", str[i]);
                    i++;
                    fprintf(res, "%c", str[i]);
                    i++;
                }
                if (str[i] == '*' && !(str[i - 1] >= 'a' && str[i - 1] <= 'z') && str[i - 1] != ' ')
                {
                    fprintf(res, " ");
                }

                if (((str[i - 1] == '=' && str[i] != '=' && str[i] != ' ' && str[i] != '+' && str[i] != '-' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '<' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\''))
                    || (str[i] == '>' && str[i - 1] != ' ' && str[i - 1] != '-' && (str[i - 1] != '\'' || str[i + 1] != '\''))
                    || (str[i] == '='&& str[i - 1] != '=' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '>' && str[i - 1] != '<' && str[i - 1] != '!' && str[i - 1] != '+' && str[i - 1] != '-' && str[i - 1] != '*')
                    || (str[i - 1] == '+' && str[i] != '+' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '+' && str[i + 1] != '+' &&str[i - 1] != '=' && str[i - 1] != '=' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '+' && str[i - 1] != ' ')
                    || (str[i] == '&' && str[i + 1] == '&' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ')
                    || (str[i] == '|' && str[i + 1] == '|' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ')
                    || (str[i - 1] == '|' && str[i] != '|' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i - 1] == '-' && str[i] != '-' && str[i] != '>' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '-' && str[i - 1] != '-' &&str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '=' && str[i + 1] != '-' && str[i + 1] != '>')
                    || (str[i - 1] == '&' && str[i - 2] == '&' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i - 1] == '*' && str[i] != ' ' && str[i] != '=' && str[i] != '*' && str[i] != '"' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '*' && str[i - 1] != '*' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ')
                    || (str[i - 1] == '/'&& str[i] != '/' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '/' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\''))
                    || (str[i - 1] == '%' && (str[i] != '\'' || str[i - 2] != '\'') && !(str[i] >= 'a' && str[i] <= 'z'))
                    || ((str[i - 1] == '>' || str[i - 1] == '<') && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && str[i - 2] != '-')
                    || (str[i - 1] == ',' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '(' && str[i] != ')' && str[i] != '(' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == ')' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ' && str[i - 1] != '(' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '!' && str[i - 1] != ' ')) && str[i] != ' ' && str[i] != ';')
                {
                    fprintf(res, " ");
                }
 
            }
 
            if (str[i] != '\0')
            {
                fprintf(res, "%c", str[i]);
            }
            else break;
            i++;
        }
    }
    fclose(res);
}
main:
#include "Header.h"

int main()
{
    FILE * f = fopen("source.txt", "r");
    int size;
    fseek(f, 0, SEEK_END);
    size = ftell(f);
    fseek(f, 0, SEEK_SET);
    int i = 0;
    char* str = (char*)malloc(size * sizeof(char));
    if (f == NULL) perror("Ошибка открытия файла");
    else
    {
        read(f,str,size);
        format(str, size);
 
    }
    free(str);
    fclose(f);
    return 0;
}
header.h:
#include < malloc.h >
#include < stdio.h >
int for_format(FILE* res, char * str, int i);
void format(char * str, int size);
void read(FILE* f,char * str,int size);
int init_mas_format(FILE* res, char* str, int i);

Решение задачи: «Отформатировать файл с программой на языке С»

textual
Листинг программы
                if (((str[i - 1] == '=' && str[i] != '=' && str[i] != ' ' && str[i] != '+' && str[i] != '-' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '<' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\''))
                    || (str[i] == '>' && str[i - 1] != ' ' && str[i - 1] != '-' && (str[i - 1] != '\'' || str[i + 1] != '\''))
                    || (str[i] == '='&& str[i - 1] != '=' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '>' && str[i - 1] != '<' && str[i - 1] != '!' && str[i - 1] != '+' && str[i - 1] != '-' && str[i - 1] != '*')
                    || (str[i - 1] == '+' && str[i] != '+' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '+' && str[i + 1] != '+' &&str[i - 1] != '=' && str[i - 1] != '=' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '+' && str[i - 1] != ' ')
                    || (str[i] == '&' && str[i + 1] == '&' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ')
                    || (str[i] == '|' && str[i + 1] == '|' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ')
                    || (str[i - 1] == '|' && str[i] != '|' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i - 1] == '-' && str[i] != '-' && str[i] != '>' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '-' && str[i - 1] != '-' &&str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '=' && str[i + 1] != '-' && str[i + 1] != '>')
                    || (str[i - 1] == '&' && str[i - 2] == '&' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i - 1] == '*' && str[i] != ' ' && str[i] != '=' && str[i] != '*' && str[i] != '"' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '*' && str[i - 1] != '*' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ')
                    || (str[i - 1] == '/'&& str[i] != '/' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '/' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\''))
                    || (str[i - 1] == '%' && (str[i] != '\'' || str[i - 2] != '\'') && !(str[i] >= 'a' && str[i] <= 'z'))
                    || ((str[i - 1] == '>' || str[i - 1] == '<') && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && str[i - 2] != '-')
                    || (str[i - 1] == ',' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '(' && str[i] != ')' && str[i] != '(' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == ')' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ' && str[i - 1] != '(' && (str[i] != '\'' || str[i - 2] != '\''))
                    || (str[i] == '!' && str[i - 1] != ' ')) && str[i] != ' ' && str[i] != ';')
                {
                    fprintf(res, " ");
                }

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


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

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

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