如何在C++中 统计多行文本中的行数、单词数及字符数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C++中 统计多行文本中的行数、单词数及字符数相关的知识,希望对你有一定的参考价值。

哪位高手帮帮忙 写一个程序。 感激涕零!!!

问题补充:一、题目:统计多行文本中的行数、单词数及字符数
二、目的与要求
1. 目的
通过解决统计多行文本中的行数、单词数及字符数,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。
2. 基本要求
(1) 要求用C++语言编程,在Visual C++环境下调试完成;
(2) 要求划分功能模块,各个功能分别使用函数来完成;
(3) 源代码程序要求必要的注释。
三、设计方法和基本原理
1. 课题功能描述
设计一个能够统计多行文本中的行数、单词数及字符数,请运行示例程序来查看运行的效果。

注意!!!此时字符串输入时要输入多行(段)字符串,空行结束!

2. 问题详细描述
本题中英文单词的构词规则为由英文字符构成,不考虑纯数字例如:“1,250,220”,只考虑由字符构成的单词,但是单词的分隔符应该包括基本的标点符号和空格。
统计多行文本的行数、单词总数和字符总数。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。

一、关键是思路, 单词, 行,字符,数字, 他们有什么特点:
1、单词,标准的是遇到空格后,单词数,自动加一。
2、行是以\\n结束的, 也就是说, 遇到\\n行数加一,当然也视你的操作系统而言, windows的话,就是这样。
3、字符, 空格是否记在里面? 等因素需要考虑。
4、数字,这个的统计,通过ascll表, 或者,字符,都能很好的解决。

二、例程:

#include <iostream>
#include <vector>
using namespace std;
class txt

public:
 txt(vector<char> cha)ch = cha;
 void count_word(); //统计单词数
 void count_line(); //统计行数
 void count_ch(); //统计字符数
private:
 vector<char> ch;
;
void txt::count_line()

 int count = 0;
 for (int i=0;i < ch.size();i++)
 
  if ('\\012' == ch[i])
   count++;
 
 cout << "总行数:" << count <<endl;

void txt::count_word()

 int count = 0;
 bool v=true;
 for (int i=0;i < ch.size();i++)
 
  if (!(ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z'))
  
   if (v)
    count++;
   v=false;
  
  else
   v=true;
 
 cout << "单词数:" << count <<endl;

void txt::count_ch()

 int count = 0;
 for (int i=0;i < ch.size();i++)
 
  if ('\\012' != ch[i])
   count++;
 
 cout << "字符数:" << count <<endl;

int main()

 vector<char> words;
 cout << "请输入多行文本,空行结束:" <<endl;
 char word;
 //输入文本,不忽略空格和换行
 cin.unsetf( ios::skipws );
 while (cin >> word )
 
  //判断如果输入的是数字,则返回
  if (word >= '0' && word <= '9')
  
   cout << "对不起,您输入的字符中含数字。" << endl;
   return -1;
  
  words.push_back(word);
  int i = words.size();
  if (words[i-2] == '\\012' && words[i-1] == '\\012')
  
   break;
  
 
 //删除最后一个空行,因空行代表结束
 words.pop_back();
 //定义类对象
 txt t(words);
 t.count_line();
 t.count_word();
 t.count_ch();
 return 0;

参考技术A #include <stdio.h>
//判断是否换行
int isRow(char c,int &bz_r)

if(c=='\n')

bz_r++;
if(bz_r==1)
return 1;
else
return 0;

else

if(bz_r>0)
bz_r=0;
return 0;


//判断是否单词
int isWord(char c,int &bz_w)

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

bz_w++;
if(bz_w==1)
return 1;
else
return 0;

else

if(bz_w>0)
bz_w=0;
return 0;


//判断是否字符
int isLetter(char c)

if((c<'0'||c>'9')&&c!='\n')
return 1;
else
return 0;


int main ()

int row=0,word=0,letter=0;//初始化总行数 ,单词数 ,字符数
int bz_r=0,bz_w=0;//行连续出现次数 ,英文字符连续出现次数
char c;
while(bz_r<2)//如果不是空行则循环

c=getchar();
row+=isRow(c,bz_r);
word+=isWord(c,bz_w);
letter+=isLetter(c);

printf("总行数:%d\n",row);
printf("单词数:%d\n",word);
printf("字符数:%d",letter);
return 0;
参考技术B #include <iostream>
#include <vector>
using namespace std;

class txt

public:
txt(vector<char> cha)ch = cha;
void count_word(); //统计单词数
void count_line(); //统计行数
void count_ch(); //统计字符数
private:
vector<char> ch;
;

void txt::count_line()

int count = 0;
for (int i=0;i < ch.size();i++)

if ('\012' == ch[i])
count++;

cout << "总行数:" << count <<endl;


void txt::count_word()

int count = 0;
bool v=true;
for (int i=0;i < ch.size();i++)

if (!(ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z'))

if (v)
count++;
v=false;

else
v=true;

cout << "单词数:" << count <<endl;


void txt::count_ch()

int count = 0;
for (int i=0;i < ch.size();i++)

if ('\012' != ch[i])
count++;

cout << "字符数:" << count <<endl;


int main()

vector<char> words;
cout << "请输入多行文本,空行结束:" <<endl;
char word;

//输入文本,不忽略空格和换行
cin.unsetf( ios::skipws );
while (cin >> word )

//判断如果输入的是数字,则返回
if (word >= '0' && word <= '9')

cout << "对不起,您输入的字符中含数字。" << endl;
return -1;

words.push_back(word);
int i = words.size();
if (words[i-2] == '\012' && words[i-1] == '\012')

break;



//删除最后一个空行,因空行代表结束
words.pop_back();

//定义类对象
txt t(words);
t.count_line();
t.count_word();
t.count_ch();
return 0;
本回答被提问者和网友采纳

Linux命令之统计文件字数字符数字节数及行数信息wc

概述

wc 命令用于统计指定文件中的字节数、字数、行数,并将统计结果显示输出。wcword count 的缩写。

该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

语法

该命令支持的选项有:

选项说明
-w, --words统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串
-c, --bytes统计字节数
-l, --lines统计行数
-m, --chars统计字符数
-L, --max-line-length打印最长行的长度
–help显示帮助信息
–version显示版本信息

使用

查看文件的字节数、字数、行数

如果要查看文件的字节数等信息,可以使用如下格式的命令:

# 语法
wc 文件名
# 示例
wc log.txt

输出结果说明:

  • 7:第一列表示行数。
  • 7:第二列表示单词数。
  • 57:第三列表示字节数。
  • log.txt:第四列表示文件名。

统计单词数

统计单词数,可以用 -w 选项。命令格式如下:

# 语法
wc -w 文件名
# 示例
wc -w log.txt

统计字节数

如果要统计字节数,需要用到 -c 选项。命令格式如下:

# 语法
wc -c 文件名
# 示例
wc -c log.txt

统计字符数

如果要统计字符数,需要用到 -m 选项。命令格式如下:

# 语法
wc -m 文件名
# 示例
wc -m log.txt

统计行数【★★★★★】

如果要统计行数,可以使用 -l 选项。命令格式如下:

# 语法
wc -l 文件名
# 示例
wc -l log.txt

不输出文件名

使用 wc 命令默认是会输出文件名的,我们可以使用如下格式的命令,就会避免输出文件名:

# 语法
cat 文件名 | wc
# 示例
cat log.txt | wc

计算字符串长度

该命令可以用来计算字符串的长度,基本语法格式如下:

# 语法
echo 字符串 | wc -m
# 示例,之所以要加上 -n 选项是因为使用 echo 命令输出会自带一个换行符,所以去除掉才会不影响真实统计结果
echo -n "hello world" | wc -m

与管道符结合使用

wc 命令很多时候都不是单独使用的,而是同其他命令连同管道符 | 一起使用的,通常是统计其他命令执行结果。如统计 /root/ 目录下的文件个数:

以上是关于如何在C++中 统计多行文本中的行数、单词数及字符数的主要内容,如果未能解决你的问题,请参考以下文章

C++文件读写操作逐字符读取文本和逐行读取文本

统计输入的行数,单词数和字符数

作业-- 统计文本文件中的字符数单词数行数

Linux命令之统计文件字数字符数字节数及行数信息wc

Linux 中如何查看文件的行数,字数,字节数

linux中wc -l指令用法,我知道怎么得到一个文件的内容行数,但是是怎么得到多个文件的内容的总行数