7-46 新浪微博热门话题(字符串)

  • 题目链接:7-46 新浪微博热门话题
  • 考查知识:字符串
  • 题意描述:
    • 给定n条微博,每条微博里有若干话题,试统计被最多条微博提到的话题。
  • 思路简析:
    • 首先对#号位置进行记录,然后用a.substr(开始截取位置,子串长度)截取子串
    • 遍历子串所有字符
      • 是字母isalpha(b[j]),首字母大写toupper(b[j]),其他字母小写tolower(b[j])
      • 不是数字!isdigit(b[j]),都转化为空格
      • 多个连续的空格自动合并成一个,前导后续空格也省略掉b.erase(j,1)
  • 具体代码
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n,mx=-1;
    	cin>>n;
    	getchar();
    	map<string,int>m;//话题,被多少条微博提到 
    	for(int i=0;i<n;i++){//输入 
    		stack<int>s;
    		string a,b;
    		getline(cin,a);
    		int z=a.size();
    		for(int j=0;j<z;j++){//保存所有#的位置
    			if(a[j]=='#')s.push(j);
    		}
    		map<string,int>m2;//话题,本条微博中该话题是否出现 
    		while(s.size()){//每次取出2个#的位置
    			int x=s.top();s.pop();
    			int y=s.top();s.pop();
    			int z=x-y-1,f=0;//z:子串长度 f:标记首字母 
    			b=a.substr(y+1,z);//提取 2个#之间的内容
    			for(int j=0;j<z;j++){
    				if(isalpha(b[j])){//字母,首字母大写,其他字母小写 
    					if(f++)b[j]=tolower(b[j]);
    					else b[j]=toupper(b[j]);
    				}else if(!isdigit(b[j]))b[j]=' ';//不是数字,都转化为空格 
    			}
    			for(int j=0;j<z;j++){//多个连续的空格自动合并成一个,前导后续空格也省略掉
    				if(j==0&&b[j]==' ')b.erase(j,1),z--,j--;
    				if(b[j]==' '&&j+1<z&&b[j+1]==' ')b.erase(j,1),z--,j--;
    			} 
    			for(int j=z-1;j>=0;j--){
    				if(j==z-1&&b[j]==' ')b.erase(j,1),z--,j++;
    			}
    			if(!m2[b]){//该话题在该条微博中第一次出现,更新mx 
    				m2[b]=1;
    				mx=max(mx,++m[b]);
    			}
    		}	
    	}
    	int cn=0;//找出现最多话题的个数 
    	for(auto it=m.begin();it!=m.end();it++){
    		if(mx==it->second){
    			cn++;
    			if(cn==1)cout<<it->first<<endl<<it->second<<endl;
    		}
    	}
    	if(cn>1)cout<<"And "<<cn-1<<" more ..."; 
    	return 0;
    }
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值