AcWing 766. 去掉多余的空格-4种方法-后三种来自y总
原题链接
简单
作者:
枫哥
,
2024-10-29 09:24:38
,
所有人可见
,
阅读 2
#include <iostream>
#include <string>
using namespace std;
// 算法1:replace(自己的方法)
int main(){
string s;
getline(cin,s);
for(int i = 0;i < s.size();i++){
if (s[i] == ' '){
int count = 0;
int j = i+1;
while(j < s.size() && s[j] == ' '){
count++;
j++;
}
if(count > 0)
s.replace(i+1,count,"");
}
}
cout << s;
return 0;
}
// 算法2:cin
int main(){
string s;
while(cin >> s) cout << s+' ';
return 0;
}
// 算法3:第一类双指针——搭桥过河
int main(){
string s,r;
getline(cin,s);
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;
}
// 算法4:局部性判断
int main(){
string s;
getline(cin,s);
for (int i = 0 ;i < s.size();i++){
if (s[i] != ' ') cout << s[i];
else{
if(!i || s[i-1] != ' ') cout << ' ';
}
}
return 0;
}