https://gitee.com/sunlong1233/WordCount
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
可执行程序命名为:wc.exe,该程序处理用户需求的模式为:
wc.exe [parameter] [input_file_name]
存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。
wc.exe -c file.c //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的单词总数
wc.exe -l file.c //返回文件 file.c 的总行数
wc.exe -o outputFile.txt //将结果输出到指定文件outputFile.txt
我运用的是C语言编写的WordCount,三个函数File_c,file_w,file_l,分别统计字符数,单词数和行数,并把统计的信息录入到result.txt的文件中。
int count_C(char*filename)
{
FILE *fp = fopen(filename,"r");
char buffer[100];
int num=0;
int len;
char f=0;
while(fgets(buffer,100,fp) != NULL)
{
len = strlen(buffer);
for(int i=0;i < len; i++)
{
f=buffer[i];
if(f != ‘ ‘ && f != ‘\t‘ && f != ‘\n‘ && f != ‘\r‘)
{
num++;
}
}
}
fclose(fp);
return num;
}
int count_W(char*filename)
{
FILE *fp = fopen(filename,"r");
char buffer[100];
bool islast = false;
int num=0;
int len;
int line=0;
char f=0;
while(fgets(buffer,100,fp)!=NULL)
{
line++;
len=strlen(buffer);
for(int i=0; i < len; i++)
{
f=buffer[i];
if(f != ‘ ‘ && f != ‘\t‘ && f!= ‘\n‘)
{
!islast && num++;
islast = true;
}
else if(f != ‘\n‘ && f != ‘\r‘)
{
islast = false;
}
}
!islast && num++;
islast = true;
}
fclose(fp);
return num+line-1;
}
int count_L(char*filename)
{
FILE *fp = fopen(filename,"r");
char buffer[100];
int num=0;
while(fgets(buffer,100,fp)!=NULL)
{
num++;
}
fclose(fp);
return num;
}
//打印字符数
void outfile_C(char*ofname,char* filename,int file_C)
{
FILE *of=fopen(ofname,"a");
fprintf(of,"%s 字符数:%d\n",filename,file_C);
fclose(of);
}
//打印单词数
void outfile_W(char*ofname,char* filename,int file_W)
{
FILE *of=fopen(ofname,"a");
fprintf(of,"%s 单词数:%d\n",filename,file_W);
fclose(of);
}
//打印行数
void outfile_L(char*ofname,char* filename,int file_L)
{
FILE *of=fopen(ofname,"a");
fprintf(of,"%s 行数:%d\n",filename,file_L);
fclose(of);
}
int main(int argc, char* argv[])
{
FILE *fp;
FILE *of;
int file_C;
int file_W;
int file_L;
char *filename = argv[argc-1];
char ofname[] = "result.txt";
of=fopen(ofname,"w+");//初始化result
if(filename == NULL)
{
printf("指令出错");
return 0;
}
else
{
for(int i=1; i < argc-1; i++)
{
switch(argv[i][1])
{
case ‘c‘:
file_C=count_C(filename);
printf("%s, 字符数: %d\n",argv[argc-1],file_C);
outfile_C(ofname,argv[argc-1],file_C);
break;
case ‘w‘:
file_W=count_W(filename);
printf("%s, 单词数: %d\n",argv[argc-1],file_W);
outfile_W(ofname,argv[argc-1],file_W);
break;
case ‘l‘:
file_L=count_L(filename);
printf("%s, 行数: %d\n",argv[argc-1],file_L);
outfile_L(ofname,argv[argc-1],file_L);
break;
}
}
}
fclose(fp);
fclose(of);
return 0;
}
中途-o功能出现了小问题,只好另外找方法,最后还是大致做完了,希望下次能完成的更好。
https://blog.csdn.net/clh19901213/article/details/18269989
https://www.cnblogs.com/saolv/p/7793379.html
原文:https://www.cnblogs.com/sunlong1233/p/9733624.html