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;
}

被折叠的 条评论
为什么被折叠?



