第二次作业(WordCount)

WordCount

===========

1.Gitee地址

https://gitee.com/sunlong1233/WordCount

2.作业要求

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

3.思路

我运用的是C语言编写的WordCount,三个函数File_c,file_w,file_l,分别统计字符数,单词数和行数,并把统计的信息录入到result.txt的文件中。

4.代码

4.1 统计字符

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;
}

4.2 统计单词数

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;
	
}

4.3 统计行数

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;
}

4.4 打印信息


//打印字符数
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);
}

4.5 主函数

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;
}

5 测试



6 总结

中途-o功能出现了小问题,只好另外找方法,最后还是大致做完了,希望下次能完成的更好。

7 参考

https://blog.csdn.net/clh19901213/article/details/18269989
https://www.cnblogs.com/saolv/p/7793379.html

posted @ 2018-09-30 22:59  那位大人  阅读(113)  评论(1编辑  收藏  举报