1
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!