赞
踩
主函数:
#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);
}
}
}
}
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。