使用c语言编写四个函数分别实现四个初级功能,通过一行一行的方式将flie.c文件内容读出,从而统计字符、单词和代码行数
1.输出函数
/*将统计结果输出到指定文件*/
int output(char*xFilename,char*filename,char*str,int number)
{
FILE*xp=fopen(xFilename,"w+");
fprintf(xp,"%s %s:%d\n",filename,str,number);
fclose(xp);
return 0;
}
/*复制文件*/
int outputToResult(char*opFilename,char*xFilename)
{
FILE*xp=fopen(xFilename,"r");
FILE*op=fopen(opFilename,"a");
char ch;
while((ch=fgetc(xp))!=EOF)
{
fputc(ch,op);
}
fclose(op);
fclose(xp);
return 0;
}
2.统计字符
int countC(char*filename)
{
FILE*fp=fopen(filename,"r");
char buffer[100];
int i=0;
char c=0;
int bufferLen;
int charNum=0;
while(fgets(buffer,100,fp)!=NULL)
{
bufferLen=strlen(buffer);
for(i=0;i<bufferLen;i++)
{
c=buffer[i];
if(c!=‘ ‘&&c!=‘\t‘&&c!=‘\n‘&&c!=‘\r‘)
{
charNum++;
}
}
}
fclose(fp);
return charNum;
}
3.统计单词
int countW(char*filename)
{
FILE*fp=fopen(filename,"r");
char buffer[100];
int i=0;
char c=0;
int isLastBlank=0;
int bufferLen;
int wordNum=0;
while(fgets(buffer,100,fp)!=NULL)
{
bufferLen=strlen(buffer);
for(i=0;i<bufferLen;i++)
{
c=buffer[i];
if(c!=‘ ‘&&c!=‘,‘&&c!=‘\t‘&&c!=‘\n‘
)
{
!isLastBlank&&wordNum++;
isLastBlank=1;
}
else if(c!=‘\n‘&&c!=‘\r‘)
{
isLastBlank=0;
}
}
!isLastBlank&&wordNum++;
isLastBlank=1;
}
fclose(fp);
return wordNum;
}
4.统计代码行
int countL(char*filename)
{
FILE*fp=fopen(filename,"r");
char buffer[100];
int lineNum=0;
while(fgets(buffer,100,fp)!=NULL)
{
lineNum++;
}
fclose(fp);
return lineNum;
}
测试用例
测试效果
总结
通过本次作业,我学到很多新的东西,包括git的使用和命令行参数的使用。同时也暴露出自己的很多问题,尤其是不熟悉命令操作,在使用git时,多一个两个空格就可能导致出错。
参考文献
https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%88%9D%E6%AC%A1%E8%BF%90%E8%A1%8C-Git-%E5%89%8D%E7%9A%84%E9%85%8D%E7%BD%AE
https://www.cnblogs.com/saolv/p/7793379.html
https://wenku.baidu.com/view/30d9ddc4b7360b4c2f3f6402.html
原文:https://www.cnblogs.com/ruanpeng2625/p/9733625.html