问题标题: 酷町堂:第三次跪求大佬回答

1
0

0
已采纳
杨陈卓
杨陈卓
新手天翼
新手天翼

这一题并不复杂,你想的太难了。

我的思路是:将字符串转成整形数组,

用两个变量存一下两个表示范围的ASCII序号

在选择排序时判断,

若成立就交换,

输出时再变回来。

上代码!!!

函数排序部分:
 

int sortt(int a,int b,int d[],int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
            if(d[i]<=b&&d[j]<=b&&d[i]>=a&&d[j]>=a&&d[i]>d[j])
                swap(d[i],d[j]);
}

主函数输出部分:
 

    a=(int)c;
    b=(int)z;
    for(int i=0;i<n;i++)
        d[i]=(int)s[i];
    sortt(a,b,d,n);
    for(int i=0;i<n;i++)
        cout<<(char)d[i];

其他自己处理。

AC哦!

0
0
0
陶旭杰
陶旭杰
中级光能
中级光能

我已经回答过了,请自行查阅!

0
陶旭杰
陶旭杰
中级光能
中级光能

我的思路:

首先将输入的字符串中,ascll为a~b的字符存到一个字符数组里,将一个整形数组a[i]变为1。

然后sort排序新字符数组,写一个cmp。

输出时如果a[i]==1就输出新字符数组[++j]

否则输出原字符串[i]

好了,废话不多说,上代码!

 

 

string s;

 

char num[10001];

 

char s1,s2;

 

int a[10001],j=0,l=0;//定义

 

 

bool cmp(char x,char y){

 

return x<y;

 

}//cmp函数定义方法,要在主函数外定义

 

 

for(int i=0;i<s.size();i++){

 

if(s[i]>=s1&&s[i]<=s2){

 

num[++l]=s[i];

 

a[i]=1;

 

}

 

}//如果是在a~b之间,装到新数组里

sort(num+1,num+l+1,cmp);//sort排序,调用cmp函数
 

 

for(int i=0;i<s.size();i++){

 

if(a[i]==1){

 

cout<<num[++j];

 

}

 

else{

 

cout<<s[i];

 

}

 

} //分两种情况输出

//最后:AC!

祝你AC!

我要回答