习题8-7 字符串排序
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted: 每行一个字符串
输入样例:
red yellow blue black white
输出样例:
After sorted: black blue red white yellow
第一次代码如下:
#include <stdio.h>
#include <string.h>
void getstr(char a[]);
void Myswap(char **p1,char **p2);
int main(){
int i,j;
char a[81]={0},b[81]={0},c[81]={0},d[81]={0},e[81]={0};
char *ptr[]={a,b,c,d,e};
for(i=0;i<5;i++){
getstr(ptr[i]);
}
for(i=1;i<5;i++){
for(j=1;j<5-i+1;j++){
if(strcmp(ptr[j-1],ptr[j])>0){
Myswap(ptr[j-1],ptr[j]);
}
}
}
printf("After sorted:");
for(i=0;i<5;i++){
printf("\n%s",ptr[i]);
}
}
void getstr(char a[]){
char ch;
int i=0;
while((ch=getchar())!=' '&&ch!='\n'){
a[i]=ch;
i++;
}
}
void Myswap(char **a, char **b){
char *temp = *a;
*a = *b;
*b = temp;
}
但提交之后
手动输入测试数据之后
果然有问题,不知道为什么大于8个元素后的都被吞掉了 ,对代码进行检查,发现是在交换的位置忘加取地址符,这次的教训就是不能忽略警告
答案如下:
#include <stdio.h>
#include <string.h>
void getstr(char a[]);
void Myswap(char **p1,char **p2);
int main(){
int i,j;
char a[81]={0},b[81]={0},c[81]={0},d[81]={0},e[81]={0};
char *ptr[]={a,b,c,d,e};
for(i=0;i<5;i++){
getstr(ptr[i]);
}
for(i=1;i<5;i++){//冒泡法排序
for(j=1;j<5-i+1;j++){
if(strcmp(ptr[j-1],ptr[j])>0){
Myswap(&ptr[j-1],&ptr[j]);
}
}
}
printf("After sorted:");
for(i=0;i<5;i++){
printf("\n%s",ptr[i]);
}
}
void getstr(char a[]){/ 定义一个函数,用于获取字符串
char ch;
int i=0;
while((ch=getchar())!=' '&&ch!='\n'){//循环,直到遇到空格或回车
a[i]=ch;
i++;
}
}
void Myswap(char **a, char **b){// 定义一个函数,用于交换两个字符串的地址
char *temp = *a;
*a = *b;
*b = temp;
}
提交后: