输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。
输入格式
共一行,包含一个字符串。
输出格式
输出去掉多余空格后的字符串,占一行。
数据范围
输入字符串的长度不超过 200200。
保证输入字符串的开头和结尾没有空格。
输入样例:
Hello world.This is c language.
输出样例:
Hello world.This is c language.
看见了一种极其巧妙的方法,非常神奇
其思想就是cin不读入空格,那就该怎么输入就该怎么输出
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
cout<<s<<" ";
}
}
第二种方法可以设置一个标记量,若出现多个空格,只返回一个,我在这被卡住了,不知道怎么去设,大佬们好强,我是小菜鸡新手;
#include<iostream>
using namespace std;
int main()
{
string s;getline(cin,s);//输入字符串
int flag = 0; //设置标记变量
for(int i =0;i<s.size();i++)
{
if (s[i]!=' ')
{
cout<<s[i];flag = 0;
}
//if …… else if 只会判断一个,若if成立则跳过else if
else if(flag == 0) //若为零,只进入一次,flag置为1;
{
cout<<" ";
flag =1;
}
}
}
第三种是跳过多余空格,来到没空格的地方输出
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin, s);
string r;
for (int i = 0; i < s.size(); i ++ )
if (s[i] != ' ') r += s[i];
else
{
r += ' ';
int j = i;
while (j < s.size() && s[j] == ' ') j ++ ;
i = j - 1;
}
cout << r << endl;
return 0;
}
第四种是局部性判断法,在i位置为空格时,确定前一个不是空格就输出
#include<iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
string r;
for(int i =0 ;i<s.size();i++)
{
if(s[i]!= ' ') r+=s[i];
else
{
if(!i||s[i-1]!=' ')r+=' ';//若开头出现空格,则舍去
}
}
cout<<r<<endl;
}