Вы можете усложнить себе, что должно быть.В то время как ваш заголовок вывода с двумя столбцами добавляет немного сложностей с форматированием, самый простой способ обработки ввода и классификации (store-it / ignore-it) - это символьно-ориентированный подход с использованием getchar()
или fgetc()
.
Таким образом, вы просто постоянно читаете из ввода и проверяете, является ли символ '#'
или '\n'
, если это так, прекращаете хранить символы в вашем буфере и просто читаете и выводите остальные.После завершения вашего цикла вам просто нужно nul-terminate ваш последний буфер, вычислить пробел, необходимый между концом оригинала и выводом содержимого вашего буфера, записать пробелы и последний буфер, и высделанный.Краткий пример:
#include <stdio.h>
#include <ctype.h>
#define MAXC 1024 /* if you need a constant, #define one (or more) */
int main (int argc, char **argv) {
char buf[MAXC];
int c, idx = 0, nc = 0, ws = 0;
/* use filename provided as 1st argument (stdin by default) */
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
puts ("inputs output"); /* output headings */
while ((c = fgetc(fp)) != EOF) { /* read each char until EOF */
if (c == '#' || c == '\n') { /* if # or \n, end of storage */
buf[idx] = 0; /* nul-terminate buffer at idx */
putchar (c); /* output delim in orig string */
nc++; /* increment no. of char */
while ((c = fgetc(fp)) != '\n' && c != EOF) { /* print rest */
putchar (c);
nc++;
}
ws = 20 - nc; /* compute amount of whitespace to col */
while (ws--) /* output that many spaces */
putchar (' ');
printf ("%s\n", buf); /* print the stored buffer */
idx = 0, nc = 0; /* reset index and counter */
continue; /* go get next char */
}
else if (isalnum (c)) /* if alnum char add to buffer */
buf[idx++] = c;
putchar (c); /* output all chars until # */
nc++; /* increment no. of chars */
}
buf[idx] = 0; /* nul-terminate final line after loop */
ws = 20 - nc; /* set number of whitespace needed to 2nd col */
while (ws--) /* write that number of spaces */
putchar (' ');
printf ("%s\n", buf); /* output string without whitespace in buf */
if (fp != stdin) /* close file if not reading stdin */
fclose (fp);
return 0;
}
Пример входного файла
$ cat dat/pounddelim.txt
here I am #abc
there you are #12
Пример использования / Вывод
Выполнениепрограмма на вашем входе выдает «Ожидаемые входы и выходы» :
$ ./bin/pounddelim <dat/pounddelim.txt
inputs output
here I am #abc hereIam
there you are #12 thereyouare
Просмотрите все и дайте мне знать, если у вас есть дополнительные вопросы.