主函数:
#include <stdio.h>
#include <string.h>
#define N 4
int main(){
void str_sort(char str[][N]);
char str[N][N];
int i,j;
printf("请输入%d个字符串,每个字符串长度不超过%d:\n",N,N-1);
for(int i=0;i<N;i++){
scanf("%s",p[i]);
}
printf("您输入的字符串如下:\n");
for(int i=0;i<N;i++){
printf("%s\n",str[i]);
// printf("字符串str[%d]的长度为%d\n",i,strlen(p[i]));
}
str_sort(str);
printf("排序后的结果为:\n");
for(int i=0;i<N;i++){
printf("%s\n",str[i]);
}
return 0;
}
未考虑输入如果超过列数,即每一行的长度。
如果输入长度大于了N,那么就没有’\0’作为结束,而会接着往下进行,直到找到’\0’。int str[3][3];
若输入sfgh cvhf v
,每行最多存3个字符,输入字符串长度>=3,第一行存入sfg,已满无法存’\0’,第二行存入cvh,无法存’\0’,只有第三行有’0’,则打印结果为: sfgcvhv 、cvhv 、v
这三个字符串。
会出现如下问题:
修改输入:
for(i=0;i<N;i++){
scanf("%s",str[i]);
str[i][N-1]='\0';
}
str_sort函数
void str_sort(char (*q)[N]){
char temp_st[N],*temp=temp_st,min;
int i,j,row;
//比较的每行首字母
for(i=0;i<N-1;i++){
min=i;
for(row=i+1;row<N;row++){
if(*(q[min]+0)>*(q[row]+0)){
min=row;
}
}
// printf("min=%d\n",min);
if(min!=i){
strcpy(temp,q[min]);
strcpy(q[min],q[i]);
strcpy(q[i],temp);
}
}
}
void str_sort(char (*q)[N]){
char temp_st[N],*temp=temp_st;
int i,j;
for(i=0;i<N-1;i++){
for(j=i+1;j<N;j++){
//比较每行字符串
if(strcmp(q[i],q[j])>0){
strcpy(temp,q[j]);
strcpy(q[j],q[i]);
strcpy(q[i],temp);
}
}
}
}
运行结果: