#include <stdio.h>
#include <string.h>
#include <stdbool.h>
// 读取文件到字符数组
bool read(const char* file,char* str)
{
if( NULL == file || NULL == str)
{
return false;
}
// 以只读方式打开文件
FILE* fp = fopen(file,"r");
if(NULL!=fp)
{
// 用fgets()函数读取文件
char line[128] = "";
while(fgets(line,128,fp)!=NULL)
{
// 将读取得到的字符串保存到目标字符数组中
strcat(str,line);
}
// 关闭文件
fclose(fp);
fp = NULL;
return true;
}
else
{
printf("cannot open %s.",file);
return false;
}
}
// 统计字符串中的单词数
int countword(char* text)
{
// 寻找单词开始位置
// 一直从字符串开始位置向后寻找,
// 直到遇到一个字母字符
while(!isalpha(*text))
{
// 如果找到了字符串结束位置,
// 意味着整个字符串寻找完毕,
// 结束整个递归
if('\0' == *text)
{
return 0;
}
++text; // 查找下一个字符
}
// 寻找字符串的结尾
// 从开始位置一直向后查找
// 直到遇到一个非字母字符
while(isalpha(*text))
{
// 如果当前字符是字母字符
// 则继续查找下一个字符
++text;
}
// 找到一个单词,向下递归
return 1 + countword(text);
}
int main(int argc,char* argv[])
{
if(argc != 2)
{
puts("ARGUMENS ERROR. eg. count demo.txt");
return 1;
}
char text[1028*10] = "";
if(read(argv[1],text))
{
int n = countword(text);
// 输出字符串中的单词数,也就是空格数加1
printf("there is(are) %d word(s) in the \"%s\"",n,argv[1]);
}
return 0;
}
学员评论
飞渔吹雪2014-11-05
你感兴趣的课程