C++统计一段文字中各单词出现的频率
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class SqString
{
private:
char * base;
int length;
public:
SqString()
{
}
SqString(char * s)
{
length=0;
base=s;
int i=0;
while(s[i]!='\0')
{
++i;
++length;
}
}
char * getBase()
{
return base;
}
int getLength()
{
return length;
}
void StrConcat(SqString ss)
{
char * newbase=new char[ss.getLength()+length+1];
for(int i=0;i<length;i++)
{
newbase[i]=base[i];
}
for(int j=0;j<=ss.getLength();j++)
{
newbase[j+length]=ss.base[j];
}
base=newbase;
length=ss.getLength()+length;
}
int getNumOfSonSqString(SqString son)
{
int Num=0;
for(int i=0;i<=length-son.getLength();i++)
{
int j=0;
for(j=0;j<son.getLength();j++)
{
if(son.base[j]!=base[i+j])
{
break;
}
}
if(j==son.getLength())
{
Num++;
}
}
return Num;
}
bool isEqual(SqString s)
{
int i=0;
while(s.base[i]!='\0'&&s.base[i]==base[i]&&base[i]!='\0')
{
++i;
}
if(i==length&&i==s.length)
{
return true;
}
else
{
return false;
}
}
};
class SqStringNode
{
public:
SqStringNode * pNext;
SqString data;
};
class SqStringList
{
public:
SqStringNode * pHead;
SqStringNode * pTail;
int length;
public:
SqStringList()
{
pHead=new SqStringNode;
pTail=pHead;
pTail->pNext=NULL;
length=0;
}
void insertIntoList(SqString s)
{
SqStringNode * sNode=new SqStringNode;
sNode->data=s;
sNode->pNext=NULL;
pTail->pNext=sNode;
pTail=sNode;
length++;
}
void show()
{
SqStringNode * temp=pHead->pNext;
while(temp)
{
cout<<temp->data.getBase()<<endl;
temp=temp->pNext;
}
}
int getListLength()
{
return length;
}
bool isHave(SqString s)
{
SqStringNode * temp=pHead->pNext;
int i=0;
while(temp)
{
if(temp->data.isEqual(s))
{
break;
}
temp=temp->pNext;
i++;
}
if(i>=length)
{
return false;
}
else
{
return true;
}
}
};
class Text
{
private:
SqString content;
char * inside;
int length;
public:
Text(SqString & s)
{
content=s;
length=s.getLength();
inside=content.getBase();
}
char * getInside()
{
return inside;
}
SqString getContent()
{
return content;
}
int getTextLength()
{
return length;
}
SqStringList getAllWordsFromText()
{
char * temp=new char[20];
SqStringList list;
int j=0;
for(int i=0;i<length;i++)
{
if(inside[i]==' '||inside[i]==','||inside[i]=='.')
{
temp[j]='\0';
if(temp[0]!='\0')
{
SqString sqstring(temp);
if(!list.isHave(temp))
{
list.insertIntoList(sqstring);
}
}
temp=new char[20];
j=0;
while(inside[i]==' '||inside[i]==','||inside[i]=='.')
{
++i;
}
}
temp[j]=inside[i];
j++;
}
//最后一个单词的判断
temp[j]='\0';
SqString sqstring(temp);
if(!list.isHave(temp))
{
list.insertIntoList(sqstring);
}
return list;
}
};
int main(int argc, char *argv[]) {
SqString sqstring("flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie,flypie is good,flypie is better,flypie is best,I love flypie");
Text text(sqstring);
cout<<"这段文字为:"<<endl;
cout<<text.getInside()<<endl;
cout<<"----------------------------------"<<endl;
cout<<"统计结果为:"<<endl;
SqStringList list=text.getAllWordsFromText();
//list.show();
SqStringNode * temp=list.pHead->pNext;
while(temp)
{
cout<<temp->data.getBase()<<" : "<<sqstring.getNumOfSonSqString(temp->data)<<endl;
temp=temp->pNext;
}
return 0;
}
C++统计一段文字中各单词出现的频率的更多相关文章
- 统计一段文字中出现频率最高的10个单词(c语言)
注:这次使用C语言做的这个程序.个别不懂的地方和算法部分是请教的其他同学,交流并吸收,所以收获颇多! 在程序中每一个地方我都做了注释,方便同学之间交流.也让老师容易看.程序也有很多不足的地方,但限于本 ...
- java-统计一段句子中各单词出现的次数
问题:统计一段句子中各单词出现的次数. 思路: 1.使用split方法将文章进行分割,我们这里以空格.逗号和句点为分隔符,然后存到一个字符串数组中. 2.创建一个hashMap集合,key是字符串类型 ...
- 使用PHP的strstr()函数来统计一段字符串中元音字母的个数(区分大小写)
<?php/**练习:统计一段字符串中所有元音字母的个数(区分大小写)*/$str='This is a test file.'; //原始字符串echo $str.'<br>'; ...
- 一段文字中的几个keyword显示高亮
将一段文字中的几个keyword显示高亮 演示样例:将"我的愿望是当个绿巨人,所以我想让我的皮(derma)肤是绿色"中的"皮肤"显示绿色. <span ...
- js或者jq判断一段文字中是否有自己想要的那几个字,如果有就把那几个字变成红色
如何判断一段文字中是否有自己想要的那几个字,如果有就把那几个字变成红色(在html中)比如有body中有这么一串文字“驾驶的后视镜的华盛顿”,想要判断里面是否有“驾驶”这两个字,如果有就把这两个字变成 ...
- java 实现统计某段文字在内容中出现的次数
http://outofmemory.cn/code-snippet/815/java-zishutongji 一个api,位于apache.commons.lang.StringUtils类下的一个 ...
- JS 实现计算一段文字中的字节数,字母数,数字数,行数,汉字数。
看到了匹配,第一个想到了用正则表达式,哈哈,果然很方便.不过正则表达式高深莫测!我还没有研究明白啊..目前学了点皮毛.代码如下: <!DOCTYPE html PUBLIC "-//W ...
- 使用hadoop统计多个文本中每个单词数目
程序源码 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Con ...
- 一个简单的程序,统计文本文档中的单词和汉字数,逆序排列(出现频率高的排在最前面)。python实现。
仅简单统计英文. from collections import Counter f = open('1') c = Counter() for line in f: g = (x for x in ...
随机推荐
- [HDOJ5877]Weak Pair(DFS,线段树,离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意:给一棵树和各点的权值a,求点对(u,v)个数,满足:1.u是v的祖先,2.a(u)*a(v ...
- IP地址验证
/** * 验证IP地址 * * @param 待验证的字符串 * @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false ...
- Using SSH on Linux
This document covers the SSH client on the Linux Operating System and other OSes that use OpenSSH. W ...
- css3 3d学习笔记
几个属性: -webkit-perspective:0;景深(默认0), -webkit-perspective-origin:center center;景深基点(默认中间), -webkit-tr ...
- 动态CSS--less
忙了很久终于有时间来写点东西了,不知道大家有没有发现,我们在写CSS的时候总是在重复很多代码,一个相同的属性值往往要重复N次,以前我就经常想有没有什么办法能让我们不用一直重复的font-size啊co ...
- iOS - Swift NSTimer 定时器
前言 public class NSTimer : NSObject 作用 在指定的时间执行指定的任务. 每隔一段时间执行指定的任务. 1.定时器的创建 当定时器创建完(不用 scheduled 的, ...
- spring常用的工具类
spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入 ...
- 【Todo】Java新技术学习笔记-from某技术分析
看到这篇文章:http://mt.sohu.com/20160806/n462923089.shtml <十余年技术大牛告诉你,这些Java新技术不可错过> 虽然讲的比较泛,但是里面提到的 ...
- 2年后的Delphi XE6
1.有幸下载到Delphi XE6,下载地址如下: http://altd.embarcadero.com/download/radstudio/xe6/delphicbuilder_xe6_win. ...
- unsigned 整型实现无溢出运算
普通的 int 整型能表示的范围很有限,所以刷题时很多时候不得不用 long long 来存更大的数据.或者找出数列中某个只出现一次(或奇数次)的数(其余的数均出现两次 / 偶数次),用异或运算的经典 ...