C语言用选择排序法从小到大排序字符串
答案:3 信息版本:手机版
解决时间 2020-06-09 08:39
已解决
2020-06-09 01:59
应该已经接近真相了~~请问 哪里出错了~可以运行,无法输出重新排列后的字符串
#include
#include
#define Max 100
int main()
{
char shmily[Max];
int count;
int i,j,k,empty;
printf("请输入字符串:\n");
scanf("%s",&shmily);
count=strlen(shmily);
for(i=0;i
{
k=i;
for(j=i+1;j
{
if(shmily[j]
{
k=j;
}
}
if(k!=i)
{
empty=shmily[k];
shmily[k]=shmily[i];
shmily[i]=empty;
}
}
printf("按照ASCII表重新排列为:\n");
for(i=0;i
{
printf("%s",shmily[i]);
}
return 0;
}
人呢~~~~~~~~~大神~~求救啊~~~~~~~~~~~~~~给点反应啊~~~~~~~~~····
全部回答
1楼
2020-06-09 04:48
最后输出的时候是逐一输出字符,用%c.
printf("按照ASCII表重新排列为:\n");
for(i=0;i
printf("%c",shmily[i]);
}
printf("\n"); //换一行
2楼
2020-06-09 03:44
已经修改好了,并且运行通过:
#include
#include
#define Max 100
int main()
{
char shmily[Max];
int count;
int i,j,k,empty;
printf("请输入字符串:\n");
scanf("%s",&shmily);
count=strlen(shmily);
for(i=0;i
{
k=i;
for(j=i+1;j
if(shmily[j]
empty=shmily[k];
shmily[k]=shmily[i];
shmily[i]=empty;
}
printf("按照ASCII表重新排列为:\n%s\n",shmily);
return 0;
}
3楼
2020-06-09 02:50
#include #include void f(char *str)
{
char *p,*q,*r,c;
for(p=str;*p;p++)
{
for(r=p,q=p+1;*q;q++)
if(*r>*q)//应该加*号,不加*号的比较大小是没有意义的,因为r,q是指针,而要比较的是指针指向的地址所储存的变量,
所以要加*号..
r=q;
if(r!=p)
{
c=*r;
*r=*p;
*p=c;
}
}
for(p=str;*p;p++)
{
for(q=p+1;*q && *q==*p;q++)//增加了&& *q=*p,这样才能保证当出现相同的字符时才开始操作,过程如下:
假设排好序的字符串为aab;
那么p首先指向a,q指向第二个a,此时满足*p==*q的条件,进入for循环,将q开始的字符串赋给p开始的字符串,即
aab->ab;
如果*p!=*q时,循环结束,大致就是这样子了..
strcpy(p,q--);
}
}
void main()
{
char s[50];
int number=0;
printf("please enter a string:\n");
gets(s);
f(s);
printf("%s\n",s);
}
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯