Я начинаю работать в C и системном программировании. Для задания домашней работы мне нужно написать программу, которая считывает входные данные из строк разбора строк stdin в слова и отправляет слова в подпроцессы сортировки, используя очереди сообщений System V (например, количество слов). Я застрял на входной части. Я пытаюсь обработать вход, удалить не-альфа-символы, поместить все альфа-слова в нижний регистр и, наконец, разделить строку слов на несколько слов. Пока я могу печатать все альфа-слова в нижнем регистре, но между словами есть строки, которые, я считаю, неверны. Может кто-нибудь взглянуть и дать мне несколько предложений?
Пример из текстового файла: Проект Gutenberg EBook "Илиады Гомера" Гомера
Я думаю, что правильный вывод должен быть:
the
project
gutenberg
ebook
of
the
iliad
of
homer
by
homer
Но мой вывод следующий:
project
gutenberg
ebook
of
the
iliad
of
homer
<------There is a line there
by
homer
Я думаю, что пустая строка вызвана пробелом между "," и "by". Я пробовал такие вещи, как "if isspace (c) ничего не делать", но он не работает. Мой код ниже. Любая помощь или предложение оценены.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
//Main Function
int main (int argc, char **argv)
{
int c;
char *input = argv[1];
FILE *input_file;
input_file = fopen(input, "r");
if (input_file == 0)
{
//fopen returns 0, the NULL pointer, on failure
perror("Canot open input file\n");
exit(-1);
}
else
{
while ((c =fgetc(input_file)) != EOF )
{
//if it an alpha, convert it to lower case
if (isalpha(c))
{
c = tolower(c);
putchar(c);
}
else if (isspace(c))
{
; //do nothing
}
else
{
c = '\n';
putchar(c);
}
}
}
fclose(input_file);
printf("\n");
return 0;
}
EDIT **
Я редактировал свой код и, наконец, получил правильный вывод:
int main (int argc, char **argv)
{
int c;
char *input = argv[1];
FILE *input_file;
input_file = fopen(input, "r");
if (input_file == 0)
{
//fopen returns 0, the NULL pointer, on failure
perror("Canot open input file\n");
exit(-1);
}
else
{
int found_word = 0;
while ((c =fgetc(input_file)) != EOF )
{
//if it an alpha, convert it to lower case
if (isalpha(c))
{
found_word = 1;
c = tolower(c);
putchar(c);
}
else {
if (found_word) {
putchar('\n');
found_word=0;
}
}
}
}
fclose(input_file);
printf("\n");
return 0;
}