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 ...
随机推荐
- Oracle同义词学习
oracle的同义词总结 从字面上理解就是别名的意思,和视图的功能类似.就是一种映射关系. 同义词拥有如下好处: 节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; 扩展的数 ...
- hdu 4123 Bob’s Race 树的直径+rmq+尺取
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- Protractor AngularJS测试框架教程
Protractor是一个建立在WebDriverJS基础上的端到端(E2E)的AngularJS JavaScript Web应用程序测试框架.Protractor全自动化真实的模拟用户在真正的浏览 ...
- linux终端vi同时显示多个文件的分屏操作及切换操作
以前看到那边分屏操作的觉得很高端,现在初步整理了一下. 这里不是那个用代码实现的分屏,完全属于linux的操作命令 一.打开并显示文件 1.打开 这个不用说了,就是vi xx.c,或者vi xx1.c ...
- 不含类解决最后一个li边距问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- (六)动手写第一个shell
1.编辑器.编译器.运行方法(脚本的3种执行方法)(1)shell程序是文本格式的,只要是文本编辑器都可以.但是因为我们的shell是要在linux系统下运行的,所以换行符必须是'\n',而windo ...
- C#_观察者模式
假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户. 把通知这个动作抽象成一个接口. public interface IService { void Notif(); } 客户如果想获得通 ...
- hiho_1139_二分+bfs搜索
题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分 最小化最大值,考虑采用二分搜索.对所有的边长进 ...
- eclips引入Java源代码
window->>preferences->>Java->Installed JRES 如图所示 这是中文本的 点击“Installed JRES”选择如下图所示的jdk ...
- SQL实现数组的功能
今天在工作遇到了一个问题,需要往表中添加数量不小而且没有规律的的数据.思考后我想到了使用高级语言中的数组功能解决. 由于SQL Server并没有数组类型,ANSI SQL-92标准中并没有任何有关数 ...