我是编程新手。我正在尝试编写一个程序,从文本文件中读取行,单词和字符。这是下面的代码。
#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);
}
我一直试图想出如何不读取!
,@
,#
,$
,%
,{{1}等特殊字符}},^
,&
,*
,(
,)
,_
。
我尝试使用if语句,因此它不会读取特殊字符,但它会读取它。我认为大写字母的if语句是错误的,因为它可能不会读小写字母。
在文件中包含以下文字,
+
并在终端输出:
!!.
但是,如果我取出两个for循环The number of lines: 2
The number of words: 5
The number of characters: 7
和(c < 'A' && c > 'Z')
,那么输出就会变为
(c < 'a' && c > 'z')
解决此问题的任何提示(我不想要答案!)?
答案 0 :(得分:1)
你的if必须是这样的:
if ('a' <= c && c <='z'){character++;}
else if ( 'A' <= c && c <='Z'){character++;}
答案 1 :(得分:1)
解决问题的最简单方法是在字符位于间隔“a”和“z”或间隔“A”和“Z”之间时增加字符计数器,然后,因为转义序列'\ n'创建一个新行,这也意味着你正在处理一个新单词,因此你也应该增加这个计数器。最后,您可以检查空格或水平制表符以增加新的字计数器。
if ((c <'a' && c >'z') || ( c <'A' && c >'Z')){
++character;
}
else if (c == '\n'){
++newline;
++newword;
}
else if (c == ' ' || c == '\t'){
++newword;
}