数据结构-词频统计

数据结构课程设计
第一步:
英文文章的词频统计,按词典顺序排放
原始文章:
在这里插入图片描述
代码:

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
const char* file = "file.txt";
#define max 5000
int k = 0;
//单词结构
struct f_word
{
	string word;
	int flag;
};
f_word fword;

//词频结构
struct f_linelist
{
	string word;
	int frequency;
};
f_linelist linelist[max];
//统计文章词频
int line_word(string word)
{
	for (int i = 0; i < max; i++)
	{
		if (linelist[i].word == word)
		{
			linelist[i].frequency += 1;
			return i;
		}
	}
	linelist[k].word = word;
	linelist[k].frequency = 1;
	k += 1;
	return 0;
}
//大写英语单词转化成小写
string word_transition(string word)
{
	for (int i = 0; i < int(word.size()); i++)
	{
		if (word[i] >= 'A' && word[i] <= 'Z')
			word[i] = word[i] + 32;
	}
	return word;
}

int main()
{
	ifstream fin;
	fin.open(file);//关联文件file
	char ch;//用于获取字符 
	string word;//用于存放单词
	int i, j, m;
	for (i = 0; fin.get(ch); i++)
	{
		if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
			fword.flag = 1;//是字母标志位设置为1
		else
			fword.flag = 0;//非字母标志位设置为0
		if (fword.flag == 0)//非字母
		{
			if (fword.word != "\0")//判断之前的word里面是否有单词
			{
				line_word(fword.word);//存放到数组里面
			}
			fword.word = "\0";//清空word
		}
		else if (fword.flag == 1)//字母
		{
			if (fword.word == "\0")//word为空,放入第一个字母
				fword.word = ch;
			else
				fword.word += ch;//word不为空,拼接字母组成单词
		}
		else cout << "获取单词时发生未知错误" << endl;
	}
	//按照词典排序(冒泡排序)
	f_linelist temp;
	for (i = 0; i < k; i++)
	{
		m = i;
		for (j = i + 1; j < k; j++)
		{
			if (word_transition(linelist[j].word) < word_transition(linelist[m].word))//将单词转换成小写进行比较
				m = j;
		}
		//交换原始单词
		temp = linelist[i];
		linelist[i] = linelist[m];
		linelist[m] = temp;
	}
	//输出词频
	cout << "all word is " << k << endl;
	for (i = 0; i < k; i++)
	{
		cout << linelist[i].frequency << "  " << linelist[i].word << endl;
	}
	//输出到文件outfile中
	ofstream fout;
	fout.open("outfile.txt");
	for (i = 0; i < k; i++)
	{
		fout << linelist[i].frequency << "  " << linelist[i].word << endl;
	}
	return 0;
}

输出结果:
在这里插入图片描述
如有问题,请在评论区交流。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

“翎羽”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值