问题 CZ: 甜蜜的烦恼(关于c++中string的一些用法)

string s[n]; //类型为string的数组

getline(cin,s[k])//输入整行字符串到s[k]中

pos = s[k].find(" ") //找" "字符,返回第一个找到的位置,没找到就返回-1

s[k].erase(pos, 1) //删除从pos位置开始的1个字符

最近珍珍学会了使用电脑,她发现可以利用电脑解决很多事情,并且效率会快许多。比如,在一份名单中找某个人的姓名,在以前,她得依次逐个查找,速度慢又很容易看错。现在,她使用菜单命令:“编辑”-“查找”(或按Ctrl+F键),在弹出的查找对话框中,输入要查找的姓名,电脑就会找到要找的姓名或告诉你不存在你要找的姓名了。真是又快又准,太爽了!
今天珍珍在查找时,输入“张明”,电脑告诉她不存在,但她不经意间发现“张 明”是有的!原来,提供原始名单的人,为了格式漂亮在中间输入了一个空格,因此电脑找不到了。她想这容易解决,继续查找“李达”,没有?查找“李 达”(中间一个空格),还没有?原来某些姓名中间的空格数是有多个的!
珍珍想删除所有姓名中间的空格,但由于名单很多,一个一个删除太慢了,所以她找到了会编程解决问题的你,请你写一个程序,删除所有名单中间的空格。

输入:

第一行只有一个正整数n,表示名单中共有n个人的姓名。
第二行至第n+1行共n行,每行是一个人的姓名(由大小写英文字母以及字母之间的空格组成)。

输出:
有n+1行,第一行只有一个正整数,表示总共删除的空格数。
第二行至第n+1行共n行,每行表示一个删除空格后的姓名(按照输入姓名的次序)。

样例:
输入:
3
Zhang Ming
Li Da
Wu Ya Fei
输出:
5
ZhangMing
LiDa
WuYaFei

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s[100005];
	int n;
	cin>>n;
	int m = n; //记录名字数
	int k = 0; //存一个处理一个
	int num=0;//空格数
	int flag=0;//数字的那行回车清掉
	while(m--){
		if(flag==0){
			getline(cin,s[k]);
			flag=1; //清掉数字那行的回车
		}
		getline(cin, s[k]); //读取整行字符
		
		int pos = 0; //标记空格位置
		while(pos!=-1){ 
			pos = s[k].find(" ");//找空格
			if(pos==-1)break;//没空格就退出
			s[k].erase(pos, 1);//找到就清除空格
			num++;
		}
		k++;//处理好这个就为下一个准备
		if(m==0)break;//处理完就退出
	}
	cout<<num<<endl;//输出空格数
	for(int i=0; i<n; i++){
		cout<<s[i]<<endl;//依次输出处理好的名字
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Icy Hunter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值
>