编写一个程序,用于统计文件中单词的总数,不同单词的数目

nokia7600 2004-10-15 10:18:51
编写一个程序,用于统计文件中单词的总数,不同单词的数目。(假设输入文件中只包含字母和空格)

eg: I love Beijing and I love Shanghai.
单词总数:7
不同单词数目:5
...全文
1995 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangfasheng 2004-10-16
  • 打赏
  • 举报
回复
typedef struct WORDNODE
{
char *word;
struct WORDNODE *next;
}WORDNODE;

Insert(WORDNODE *Link,char *word);//用一个单链表保存不同的单词,
//每插入一个单词都先进行比较,如果现在正要插入的单词在链表中不存在,
//则将其插入,并且 WordNum++
int main(int argc,char *argv[])
{
char s[]="Golden Global View";
char *d=" ";
char *p;
int AllWordNum=0;//所有单词个数
int WordNum=0;//不同单词个数

WORDNODE *Link=NULL;
p=strtok(s,d);
while(p)
{
AllWordNum++;
Insert(Link,p);
p=strtok(NULL,d);
}
输出所有单词个数:AllWordNum
输出不同单词个数:WordNum
return 0;
}
willko 2004-10-16
  • 打赏
  • 举报
回复
//应用了STL MAP,拿 ftkghost(小鹏) 大侠的修改的
#include<iostream>
#include<fstream>
#include<string>
#include<set>
using namespace std;

int main()
{
ifstream infile("data.dat");
string s;
set<string> sstr; //储存不重复的单词,然后只需知道这个集合的元素个数就可以求出“不同单词数目”
int i=0; //统计单词总数

while(true)
{
infile>>s;
if ( !infile ) //如果是文件尾结束循环
break;
else
{
cout<<s<<" ";
i++;
sstr.insert(s);
}
}

cout<<endl;
cout << "单词总数:" << i << endl;
cout << "不同单词数目:" << sstr.size() << endl;
cout << "回车键结束...";
cin.get();
return 0;
}
jf_zhang 2004-10-16
  • 打赏
  • 举报
回复
不懂,有些东西没见过,不知道是什么意思
malligator 2004-10-16
  • 打赏
  • 举报
回复
不知所云
能解释一下么?
willko 2004-10-16
  • 打赏
  • 举报
回复
#include<iostream>
#include<fstream>
#include<string>
#include<set>
using namespace std;

int main()
{
ifstream infile("data.dat");
string s;
set<string> sstr;
int i=0;
while(true)
{
infile>>s;
if ( !infile )
break;
else
{
cout<<s<<" ";
i++;
sstr.insert(s);
}
}
cout<<endl;
cout << "单词总数:" << i << endl;
cout << "不同单词数目:" << sstr.size() << endl;
cout << "回车键结束...";
cin.get();
return 0;
}
renheihei 2004-10-16
  • 打赏
  • 举报
回复
在这里,set 和 map 那个效率更高呢?
renheihei 2004-10-16
  • 打赏
  • 举报
回复
set用的好!
renheihei 2004-10-16
  • 打赏
  • 举报
回复
mark
lqw0205 2004-10-16
  • 打赏
  • 举报
回复
1.建表会不会开销太大了,能不能在原输入串中比较

2.从后往前找,因为通常一段话在谈一件事情,从前
往后和从后往前实现上没有很大差异,效率上却好
像要高点
Jinhao 2004-10-16
  • 打赏
  • 举报
回复
用std::set很好呀
ftkghost 2004-10-16
  • 打赏
  • 举报
回复
用链表解决碰撞
ftkghost 2004-10-16
  • 打赏
  • 举报
回复
可以建一个Hash表存放单词(以及单词出现次数)
chang5 2004-10-16
  • 打赏
  • 举报
回复
小弟正学stl ,练练手~~~~~~
chang5 2004-10-16
  • 打赏
  • 举报
回复
#pragma warning (disable:4786)
#include <iostream>
#include <fstream>
#include <map>
#include <string>
using namespace std;
int main(int argv,char *argc[])
{
ifstream in;
string s;
map<string,int> m;
in.open(argc[1]);
if(!in) return 1;
while(in>>s){
m[s]++;
}
int sum=0;
map<string,int>::iterator p;
for(p=m.begin();p!=m.end();p++)
sum+=p->second;
map<string,int>::value_type
cout<<"File contains "<<sum<<" words"<<endl;
cout<<"Has "<<m.size()<<" different words."<<endl;
return 0;
}
antoniusguo 2004-10-16
  • 打赏
  • 举报
回复
用vector大概可以吧
只要是数组里有的就不加.没的就加进去,最后拿数组长度就行了
错了不管......
我只是来灌灌水
wxu2 2004-10-16
  • 打赏
  • 举报
回复
修正一下

if (x>=0 && n>0 )这句改成 if (x>=0)就可以了

如果数组维数计数为0,遍历数组的函数返回的时候直接返回-1
wxu2 2004-10-16
  • 打赏
  • 举报
回复
使用动态数组作为不同单词的列表

思路如下:
定义结构数组,数组维数计数器n置0
for (遍历所有单词)
{
获取一个单词c
X=调用一个遍历数组的函数,返回数组索引// 如果返回为-1则表示没找到
if (x>=0 && n>0 )
数组[X]->单词计数++
else
{
数组维数计数器n++
根据n 重新分配数组
数组[n]->单词=c
数组[n]->单词计数=1
}
}
ftkghost 2004-10-16
  • 打赏
  • 举报
回复
我的代码只是统计了单词个数,要统计不同的单词数
其实思想不复杂,但是要是文件中单词多一点,那上面的程序效率很低啊
OSNC_17 2004-10-16
  • 打赏
  • 举报
回复
willko的最好!
kobefly 2004-10-15
  • 打赏
  • 举报
回复
如果只要统计单词个数的话很简单的拉
strtok()函数就可以实现了
要统计相同单词的个数
还得比较一下
也不是很难拉
加载更多回复(4)
老规矩,先看本节效果图我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。核心代码就下面这些一,创建一个云开发小程序关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频:https://edu.csdn.net/course/play/9604/204528创建云开发小程序有几点注意的1,一定不要忘记在app.js里初始化云开发环境。2,创建完云函数后,一定要记得上传二, 创建支付的云函数1,创建云函数pay三,引入三方依赖tenpay我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。1,首先右键pay,然后选择在终端打开2,我们使用npm来安装这个依赖。在命令行里执行 npm i tenpay安装完成后,我们的pay云函数会多出一个package.json 文件到这里我们的tenpay依赖就安装好了。四,编写云函数pay完整代码如下//云开发实现支付 const cloud = require('wx-server-sdk')cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = ;exports.main = async(event, context) => 一定要注意把appid,mchid,partnerKey换成你自己的。到这里我们获取小程序支付所需参数的云函数代码就编写完成了。不要忘记上传这个云函数。出现下图就代表上传成功五,写一个简单的页面,用来提交订单,调用pay云函数。这个页面很简单,1,自己随便编写一个订单号(这个订单号要大于6位)2,自己随便填写一个订单价(单位是分)3,点击按钮,调用pay云函数。获取支付所需参数。下图是官方支付api所需要的一些必须参数。下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。六,调用wx.requestPayment实现支付下图是官方的示例代码这里不在做具体讲解了,完整的可以看视频。实现效果1,调起支付键盘2,支付完成3,log日志,可以看出不同支付状态的回调上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。下图是支付失败的回调,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧