问题遇到的现象和发生背景


T1
#include<iostream>
using namespace std;
bool cmp(char x){
if(x>='A' && x<='Z') return true;
if(x>='a' && x<='z') return true;
return false;
}
int main()
{
string s;
getline(cin,s);
int head=0,tail=s.size(),flag=0;
while (head<=tail){
if(flag==0 && cmp(s[head])) flag = 1;
else if(flag==1 && cmp(s[tail]))
{
flag = 0;
char temp = s[head];
s[head] = s[tail];
s[tail] = temp;
}
flag == 0 ? head++ : tail--;
}
cout << s << endl;
return 0;
}
T2 (更优化,只有长度大于1才显示前方数字)
#include<iostream>
using namespace std;
string ZIP(string s){
string result = "";
long num = 1,length = s.size();
char flag = s[0];
for(int z=1;z<length;z++){
if(flag==s[z]) num++;
else
{
result += flag;
result += to_string(num);
flag = s[z];
num = 1;
}
}
result += flag;
result += to_string(num);
return result.size() < s.size() ? result : s;
}
// aaaaaba -> a5b1a1
int main()
{
string s;
cin >> s;
cout << ZIP(s);
return 0;
}