方法一:
利用标识符flag来标记上一个输出字符是否为空格,如果是,那么本次字符如果还是空格的话不输出
#include <iostream>
#include <cstring>
using namespace std;
int main (){
string a;
getline(cin, a);
int flag = 0;
for (int i = 0; i < a.size(); i ++) {
if (a[i] != ' ') {
cout << a[i];
flag = 0;
}
else if (flag == 0){
cout << ' ';
flag = 1;
}
else {
continue;
}
}
return 0;
}
方法二:
#include <iostream>
#include <cstring>
using namespace std;
int main (){
string a;
getline(cin, a);
for (int i = 0; i < a.size(); i ++) {
if (a[i] != ' ' || a[i + 1] != ' ') cout << a[i];
}
return 0;
}
方法三:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
cout<<s<<" ";
}
return 0;
}
方法四:
#include<iostream>
using namespace std;
int main(){
string a;
getline(cin, a);
string b;
for(int i = 0; a[i]; i++){
if(a[i] != ' ' ||(a[i] ==' ' && a[i+1] !=' ')) b += a[i];
}
cout << b;
}
方法五:(重要!)
#include<iostream>
using namespace std;
int main(){
string a;
getline(cin, a);
string r;
for (int i = 0; i < a.size(); i ++)
if (a[i] != ' ') r += a[i];
else {
r += ' ';
int j = i; // 此处用了双指针算法!!!!
while (j < a.size() && a[j] == ' ') j++;
i = j - 1;
}
cout << r << endl;
return 0;
}
方法六:
#include<iostream>
using namespace std;
int main(){
string a;
getline(cin, a);
string r;
for (int i = 0; i < a.size(); i ++)
if (a[i] != ' ') r += a[i];
else {
if (!i || (a[i - 1] != ' ')) r += ' '; //局部性判断,要么是第一个字母是空格,要么前面没有空格,当前是空格
}
cout << r << endl;
return 0;
}