#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++统计一段文字中各单词出现的频率的更多相关文章

  1. 统计一段文字中出现频率最高的10个单词(c语言)

    注:这次使用C语言做的这个程序.个别不懂的地方和算法部分是请教的其他同学,交流并吸收,所以收获颇多! 在程序中每一个地方我都做了注释,方便同学之间交流.也让老师容易看.程序也有很多不足的地方,但限于本 ...

  2. java-统计一段句子中各单词出现的次数

    问题:统计一段句子中各单词出现的次数. 思路: 1.使用split方法将文章进行分割,我们这里以空格.逗号和句点为分隔符,然后存到一个字符串数组中. 2.创建一个hashMap集合,key是字符串类型 ...

  3. 使用PHP的strstr()函数来统计一段字符串中元音字母的个数(区分大小写)

    <?php/**练习:统计一段字符串中所有元音字母的个数(区分大小写)*/$str='This is a test file.'; //原始字符串echo $str.'<br>'; ...

  4. 一段文字中的几个keyword显示高亮

    将一段文字中的几个keyword显示高亮 演示样例:将"我的愿望是当个绿巨人,所以我想让我的皮(derma)肤是绿色"中的"皮肤"显示绿色. <span ...

  5. js或者jq判断一段文字中是否有自己想要的那几个字,如果有就把那几个字变成红色

    如何判断一段文字中是否有自己想要的那几个字,如果有就把那几个字变成红色(在html中)比如有body中有这么一串文字“驾驶的后视镜的华盛顿”,想要判断里面是否有“驾驶”这两个字,如果有就把这两个字变成 ...

  6. java 实现统计某段文字在内容中出现的次数

    http://outofmemory.cn/code-snippet/815/java-zishutongji 一个api,位于apache.commons.lang.StringUtils类下的一个 ...

  7. JS 实现计算一段文字中的字节数,字母数,数字数,行数,汉字数。

    看到了匹配,第一个想到了用正则表达式,哈哈,果然很方便.不过正则表达式高深莫测!我还没有研究明白啊..目前学了点皮毛.代码如下: <!DOCTYPE html PUBLIC "-//W ...

  8. 使用hadoop统计多个文本中每个单词数目

    程序源码 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Con ...

  9. 一个简单的程序,统计文本文档中的单词和汉字数,逆序排列(出现频率高的排在最前面)。python实现。

    仅简单统计英文. from collections import Counter f = open('1') c = Counter() for line in f: g = (x for x in ...

随机推荐

  1. 12.Generics

    benifit: 1.make developers extremely productive is code reuse, which is the ability to derive a clas ...

  2. HDU 1754

    成段更新 easy #include <stdio.h> #include <string.h> #include <math.h> #include <io ...

  3. [转载] linux cgroup

    原文: http://coolshell.cn/articles/17049.html 感谢左耳朵耗子的精彩文章. 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要 ...

  4. css 的小细节,小总结

    CSS的一些零碎总结 1.CSS 伪元素用于向某些选择器设置特殊效果(用来当作一个东西的,跟一个元素差不多,但不是元素). ① :frist-line伪元素:用于向文本首行设置特殊样式,但是只能用于块 ...

  5. Hostapd

    Hostapd 一.基本概念 hostapd is an application used to setup your wireless interface as an access-point (m ...

  6. Android性能优化典范(二)

    Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...

  7. 三大平衡树(Treap + Splay + SBT)总结+模板[转]

    Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...

  8. D3.js 让图表动起来

    D3 支持制作动态的图表.有时候,图表的变化需要缓慢的发生,以便于让用户看清楚变化的过程,也能给用户不小的友好感. 一.什么是动态效果 绘制完成后不再发生变化的,这是静态的图表. 动态的图表,是指图表 ...

  9. 批处理+VBS+注册表实现开机自动启动EXE程序

    批处理+VBS+注册表实现WINDOWS开机自动启动EXE程序 以下都是基于WINDOWS系统. 我们都知道当我们有想某个程序在开机时自动运行,只能有三个方式: 1.做成服务,然后对服务进行配置为自动 ...

  10. 在Linux下运行C语言程序

    市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境和各种常用的必备工具,国内使用较多的是Ubuntu(乌班图).CentOS.Deepin(深度Linux).本教 ...