Си: параметры командной строки
Всем доброго времени суток. Задача не проходит по времени, подскажите что не так пожалуйста
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
char c;
FILE* input = fopen ("input.txt", "r");
FILE* output = fopen ("output.txt", "w");
do {
fscanf(input,"%c", &c);
switch (c) {
case '"':
fprintf(output,"[");
fscanf(input,"%c", &c);
while (c != '"') {
fprintf(output,"%c", c);
fscanf(input,"%c", &c);
}
fprintf(output,"]\n");
break;
case ' ':
break;
default:
printf(output,"[");
while (c != ' ' && c != '\n') {
fprintf(output,"%c", c);
fscanf(input,"%c", &c);
}
fprintf(output,"]\n");
}
} while (c != '\n');
fclose(input);
fclose(output);
return 0;
}
условие:
В этой задаче предлагается реализовать алгоритм выделения параметров из командной
строки в простом случае.
Командная строка будет содержать только следующие символы:
∙ латинские буквы (большие и маленькие) и цифры,
∙ пробел (ASCII 32),
∙ двойные кавычки (ASCII 34).
Параметры записываются в командную строку подряд в порядке следования. Между
каждыми двумя соседними параметрами вставляется один или несколько пробелов, чтобы
отделить их друг от друга. Параметр может быть целиком заключён в двойные кавычки.
Если внутри параметра есть пробелы, он заключён в двойные кавычки обязательно. Символов двойных кавычек в самих параметрах нет — ими лишь можно окружать параметры.
Все параметры непустые.
Командная строка, которую необходимо разобрать, записана в единственной строке входного файла. Её длина не превышает 100 символов. Учтите, что в этой командной строке
отсутствует имя исполняемого файла. В выходной файл нужно вывести искомые параметры
командной строки, по одному параметру в строке. Каждый параметр должен быть заключён в квадратные скобки. Особый нулевой параметр (саму командную строку) выводить не
нужно.

Ответы (1 шт):
Без подробностей:
Нужно вводить строку не по одному символу, а сразу всю, с помощью fgets()
После ввода строки пробегаем по всем символам ( for(j=0; j<strlen(..), j++) ) и считаем двойные кавычки. Если получили нечётное количество - печатаем сообщение об ошибке и выходим.
Если количество кавычек > 0, то вырезаем из исходной строки куски от чётного символа кавычки до нечётного и помещаем вырезанный кусок в список параметров. Исходную строку сдвигаем влево, что бы не образовывалось разрывов в строке.
Пункт 3 повторяем, пока есть ещё закавыченные части.
Всё, что осталось, с помощью strtoc() (http://all-ht.ru/inf/prog/c/func/strtok.html) рразбиваем на параметры и запоминаем в таблице параметров.
Печатаем таблицу параметров.