PTA 词频统计

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:

输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:

在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test.

The word "this" is the word with the highest frequency.

Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee.  But this_8 is different than this, and this, and this...#
this line should be ignored.

输出样例:

23
5:this
4:is

思路:

1.先处理字符串;

2.用字符流把每个单词及个数存入map;

3.把map的转入结构体进行排序;

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n , m ,T ;
struct node{
	string word;
	int num;
}a[12345];
bool cmp(node a,node b){
	if(a.num != b.num)return a.num > b.num;
	return a.word < b.word;
}//结构体排序出答案; 
int main(){
	string s;
	map<string,int>mp;
	while(getline(cin,s)){
		if(s[s.size()-1] == '#')s.insert(s.size()-1,"   ");
		//如果最后一位是'#'防止出现“xxxx#”的情况,在倒数第二位放一堆“ ” 
		for(int i = 0 ; i < s.size() ; i ++){
			if(s[i] >= 'A' && s[i] <= 'Z')s[i] += 32;//大写转小写 
			else if(!(s[i]>='a'&&s[i]<='z'||s[i]=='_'||s[i]>='0'&&s[i]<='9'||s[i]=='#'))
				s[i] = ' ';//遇到题目判断范围之外的,转为空格; 
		}
		stringstream ss(s);//使用字符流提取每一个单词 
		while(ss >> s){
			if(s == "#")continue;//防止把单个#当作单词 
			if(s.size() >= 15){
				mp[s.substr(0,15)] ++;//大于等于15位的词截取15个 
			}else mp[s] ++;
		}
		if(s[s.size()-1] == '#')break;//#退出 
	}
	int idx = 0;
	for(auto i : mp){
		a[++idx] = {i.first,i.second};
	}sort(a+1,a+idx+1,cmp);//存进结构体排序出答案; 
	cout << mp.size() << endl;//记得输出单词个数 
	for(int i = 1 ; i <= mp.size()/10 ; i ++){
		cout << a[i].num << ":" << a[i].word << endl;
	}
}

 --------------------------------------------------------------------------------------------------------------------------------

 记得输出单词个数!!!因为没输出这个wr了好多发。。。

### 解决Spyglass无法打开的问题 当遇到Spyglass无法正常启动的情况时,可以尝试以下几个方法来解决问题。 对于`feature could not be checked out`错误,解决方案涉及更新授权文件。具体操作是在命令行环境中使用最新的`Synopsys.dat`文件替换原有虚拟机中的同名文件[^1]: ```bash cp /path/to/new/Synopsys.dat /original/path/ ``` 之后再次尝试通过命令行启动Spyglass: ```bash spyglass ``` 如果收到 `[Error] Another session is already running or previous run had some issues` 的提示,则表明当前工作目录下存在正在运行的vc_spyglass实例或者是上次执行过程中出现了未处理的问题。此时应该先终止任何已存在的Spyglass进程,或者切换到其他路径重新开始会话[^2]: ```bash ps aux | grep spyglass # 查找并结束所有相关进程 kill -9 PID # 使用找到的PID号杀死特定进程 cd /new/directory # 或者简单地改变当前的工作目录 spyglass # 尝试重启工具 ``` 另外,在某些场景下,移除批处理模式参数也可以帮助排除因自动化脚本引起的异常情况。例如修改启动指令如下所示[^4]: ```bash spyglass –project training.prj –goals cdc/cdc_setup & ``` 尽管Lint检查并非总是必要的,但在开发流程中保持良好的实践习惯有助于提前发现潜在风险,减少后期维护成本。因此建议尽可能修复所有的警告信息而不是依赖于偶然性的成功编译结果[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值