Я новичок в программировании. Я пытаюсь написать программу, которая читает строки, слова и символы из текстового файла. Вот код ниже.Подсчет линий, слов и символов
#include "stdio.h"
#include "stdlib.h"
#define IN 1
#define OUT 0
int main (int argc, char *argv[]) {
FILE *input;
int character, newword, newline, state;
char c;
state = OUT;
character = newline = newword =0;
input = fopen(argv[1], "r");
if (input == NULL){
printf("Error! Can not read the input\n");
exit(-1);
}
while ((c = fgetc(input)) != EOF){
character++;
if (c <'a' && c >'z'){;}
if (c <'A' && c >'Z'){;}
if (c == '\n'){
newline++;
}
if (c == ' ' || c == '\n' || c == '\t'){
state = OUT;
}
else if (state == OUT){
state = IN;
newword++;
}
}
printf("The number of lines: %d\n", newline);
printf("The number of words: %d\n", newword);
printf("The number of characters: %d\n", character);
fclose(input);
}
Я пытался понять, как не читать специальные символы, такие как !
, @
, #
, $
, %
, ^
, &
, *
, (
, )
, _
, +
.
Я попытался использовать операторы if, чтобы он не читал специальные символы, но он читает его. Я думаю, что утверждение if для заглавных букв неверно, потому что оно, вероятно, не будет читать строчные буквы.
В файле следующий текст находится в нем,
!!.
и выводит в терминале:
The number of lines: 2
The number of words: 5
The number of characters: 7
Однако, если я беру два для петель (c < 'A' && c > 'Z')
и (c < 'a' && c > 'z')
, то выход будет
The number of lines: 2
The number of words: 1
The number of characters: 7
Любые подсказки, чтобы исправить эту проблему (я не знаю я хочу ответ!)?
'c <'a' && c > 'z'' always false. – BLUEPIXY
Вкратце, вы не можете остановить программу от чтения пунктуации, если файл содержит знаки препинания. Вы должны иметь дело с этим. Вы можете решить, как считать это. Обычно слова отделяются друг от друга пробелом (пробелы, вкладки, символы новой строки и т. Д.). Все, что не является белым пространством, является частью «слова». Вы можете уточнить свой выбор - например, вы можете игнорировать пунктуацию. Вы должны посмотреть заголовок '' и функции (макросы), такие как 'isalpha()' и 'ispunct()' и 'isspace()'. –
Вы также можете найти исходный код утилиты GNU 'wc' и посмотреть, как это работает. – paddy