行列互换 #include<stdio.h> main() { char str1[]={"china"},str2[]={"beijing"},str3[]={"nanjing"}; char *q[3],*p; int i,j,k,min; *q[1]=*str1; *q[2]=*str2; *q[3]=*str3; for(k=0;k<2;k++) { min=k; for(j=k+1;j<3;j++) { if(strcmp(*q[min],*q[j])>0) min=j; } if(min!=k) { *p=*q[k]; *q[k]=*q[j]; *q[j]=*p; } } for(i=0;i<3;i++) printf("%s\n",*q[i]); }
时间: 2024-01-03 15:05:14 浏览: 64
这段代码中有一些问题,我先给出一个修正后的版本:
```
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = {"china"}, str2[] = {"beijing"}, str3[] = {"nanjing"};
char *q[3], *p;
int i, j, k, min;
q[0] = str1;
q[1] = str2;
q[2] = str3;
for (k = 0; k < 2; k++) {
min = k;
for (j = k + 1; j < 3; j++) {
if (strcmp(q[min], q[j]) > 0)
min = j;
}
if (min != k) {
p = q[k];
q[k] = q[min];
q[min] = p;
}
}
for (i = 0; i < 3; i++)
printf("%s\n", q[i]);
return 0;
}
```
这段代码的功能是将三个字符串按照字典序排序并输出。其中,使用了字符指针数组 `q` 存储字符串的地址,变量 `p` 用于进行指针交换操作,变量 `min` 用于记录当前未排序部分中最小元素的下标。
修正后的代码中,首先将字符串的地址存入 `q` 数组中,然后使用选择排序的思想进行排序。最后,遍历 `q` 数组输出排序后的字符串。
需要注意的是,在 C 语言中,字符串常量是不能被修改的,因此 `str1`、`str2`、`str3` 这三个变量必须声明为字符数组,而不能声明为字符指针。同时,要使用字符串比较函数 `strcmp` 进行字符串的比较,而不能直接比较指针的大小。
阅读全文