Отформатировать файл с программой на языке С - C (СИ)
Формулировка задачи:
Задача: Отформатировать файл с программой на языке С.
Проблема: не могу понять, как нормально отформатировать switch ( проблема с табуляциями после case )
функции:main:
header.h:
#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);
}#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;
}#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, " ");
}