#include<stdio.h> #include<string.h> /*********Begin*********/ #define n 100 /*********End**********/ int main(void) { /*********Begin*********/ char a[n]; int i,j,x; char min,temp; gets(a); x=strlen (a); for(i=0;i<=x-2;i++) { for(j=i+1;j<x;j++) { if (a[j]<a[i]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } for(i=0;i<=x-1;i++) printf("%c",a[i]); } /*********End**********/ return 0; }
时间: 2023-06-29 07:15:51 浏览: 65
#include<stdio.h>
这段代码是字符串排序的代码,但是存在一些问题。
首先,在双重循环中,内部循环的条件应该是 `j < x` 而不是 `j <= x`,因为字符串的下标是从0开始的,所以它的最大下标是 `x-1`。
其次,在内部循环中,应该先找到最小值的下标,然后再将最小值与当前位置交换,而不是直接交换 `a[i]` 和 `a[j]`。
最后,在外部循环中,应该在内部循环结束后输出排序后的字符串,而不是在内部循环里面输出。
下面是修改后的代码:
```c
#include<stdio.h>
#include<string.h>
#define n 100
int main(void) {
char a[n];
int i, j, x;
char min, temp;
gets(a);
x = strlen(a);
for (i = 0; i < x - 1; i++) {
min = a[i];
int min_index = i;
for (j = i + 1; j < x; j++) {
if (a[j] < min) {
min = a[j];
min_index = j;
}
}
temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
printf("排序后的字符串为:");
for (i = 0; i < x; i++) {
printf("%c", a[i]);
}
return 0;
}
```
你可以尝试输入一些测试数据,看看是否能够正确地输出排序后的字符串。
阅读全文