博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
word count
阅读量:4703 次
发布时间:2019-06-10

本文共 3345 字,大约阅读时间需要 11 分钟。

WC项目要求:实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数、以及其他功能,并能够快速地处理多个文件。

代码来源:http://www.cnblogs.com/hgcrown/p/5311155.html 

Github 地址https://github.com/fengyulouxiao/WC/commit/dced8a000ec67828c23313dd9294f2d01ad9cb0e

内容:

#include "iostream"

#include "string"
#include "stdio.h"

using namespace std;

FILE *file;

int chars = 0, words = 0, lines = 1, symbols = 0, s[500];
char c;
//定义全局变量

void index()

{
cout << " ********************主菜单*********************" << endl;
cout << " * *" << endl;
cout << " * 1、显示字符数、单词数和行数 *" << endl;
cout << " * *" << endl;
cout << " * 2、显示符号数 *" << endl;
cout << " * *" << endl;
cout << " * 3、显示行数及行分类 *" << endl;
cout << " * *" << endl;
cout << " * 4、显示所有 *" << endl;
cout << " * *" << endl;
cout << " * 5、退出 *" << endl;
cout << " * *" << endl;
cout << " ***********************************************" << endl;
cout << " * 请选择需要的功能:";
}//主菜单函数

void analyse()

{
while ((c = fgetc(file)) != EOF)
{
chars++;
if (((c <= 'z') && (c >= 'a')) || ((c <= 'Z') && (c >= 'A')) || ((c >= '0') && (c <= '9')))
{
words++;
while ((c = fgetc(file)) != EOF)
{
chars++;
if (((c <= 'z') && (c >= 'a')) || ((c <= 'Z') && (c >= 'A')) || ((c >= '0') && (c <= '9')))
{
}
else if (c == '\n')
{
s[lines] = 1;
lines++;
break;
}
else if (c == ' ')
break;
else
{
symbols++;
break;
}
}
}
else if (c == '/')
{
if ((c = fgetc(file)) == '/')
{
symbols += 2;
s[lines] = 2;
fseek(file, -1L, SEEK_CUR);
}
}
else if (c == '\n')
{
if (s[lines] != 2)
s[lines] = 1;
lines++;
}
else if (c == ' ')
{
}
else
symbols++;
}
if (s[lines] != 2)
s[lines] = 1;
}//分析所有字符数、单词数、行数及行类的函数

int main()

{
char name[30], b;
int a, i, j;
cout << " * 请输入源文件名:";
for (;;)
{
cin >> name;
if ((file = fopen(name, "r")) != NULL)
break;
else
cout << " * 文件路径错误!请重新输入源文件名:";
}
analyse();
fclose(file);
index();
cin >> a;
while (a != 5)
{
switch (a)
{
case 1:cout << " * 字符数:" << chars << endl;
cout << " * 单词数:" << words << endl;
cout << " * 行数 :" << lines << endl;
cout << " * 按任意键返回:";
b = getchar();
b = getchar();
break;
case 2:cout << " * 符号数:" << symbols << endl;
cout << " * 按任意键返回:";
b = getchar();
b = getchar();
break;
case 3:cout << " * 行数:" << lines << endl;
for (i = 1; i <= lines; i++)
{
if (s[i] == 1)
{
if (i<10)
cout << " * 第" << i << "行为 代码行" << endl;
else if (i<100)
cout << " * 第" << i << "行为 代码行" << endl;
else
cout << " * 第" << i << "行为 代码行" << endl;
}
else if (s[i] == 2)
{
if (i<10)
cout << " * 第" << i << "行为 注释行" << endl;
else if (i<100)
cout << " * 第" << i << "行为 注释行" << endl;
else
cout << " * 第" << i << "行为 注释行" << endl;
}
}
cout << " * 按任意键返回:";
b = getchar();
b = getchar();
break;
case 4:cout << " * 字符数:" << chars << endl;
cout << " * 单词数:" << words << endl;
cout << " * 符号数:" << symbols << endl;
cout << " * 行数 :" << lines << endl;
for (j = 1; j <= lines; j++)
{
if (s[j] == 1)
{
if (j<10)
cout << " * 第" << j << "行为 代码行" << endl;
else if (j<100)
cout << " * 第" << j << "行为 代码行" << endl;
else
cout << " * 第" << j << "行为 代码行" << endl;
}
else if (s[j] == 2)
{
if (j<10)
cout << " * 第" << j << "行为 注释行" << endl;
else if (j<100)
cout << " * 第" << j << "行为 注释行" << endl;
else
cout << " * 第" << j << "行为 注释行" << endl;
}
}
cout << " * 按任意键返回:";
b = getchar();
b = getchar();
break;
}
system("cls");
index();
cin >> a;
}
return 0;
}//主函数

博主是用了代码system("cls")进行清屏操作和C中的fseek(file,-1L,SEEK_CUR)代码,没有用c++中的文件操作,需要改善。

转载于:https://www.cnblogs.com/xc2017/p/7554038.html

你可能感兴趣的文章
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>