指针数组对字符串进行排序,有关问题出现在哪里
指针数组对字符串进行排序,问题出现在哪里
[code]
# include<stdio.h>
# include<string.h>
int main(){
void change(char string[10]);
void rank(char *string[3]);
int i;
char *pointer[3];
char word[3][10];
for(i=0; i<3; i++) pointer[i]=word[i];
printf("input 3 strings:\n");
for(i=0; i<3; i++){
if(!i) printf("input the 1st number(end it with.):\n");
else if(1==i) printf("inout the 2rd number:\n");
else if(2==i) printf("input the 3th number:\n");
scanf("%s", word[i]);
change(word[i]);
}
rank(pointer);
printf("after rank:\n");
for(i=0; i<3; i++) printf("%s", *pointer[i]);
putchar('\n');
return 0;
}
void change(char string[10]){
int i=0;
while('.'!=string[i++]);
string[i]='\0';
}
void rank(char *string[3]){
int i, j, *temp;
for(i=0; i<3; i++){
for(j=0; j<2-i; j++){
if(strcmp(string[j], string[j+1])>0){
temp=string[j];
string[j]=string[j+1];
string[j+1]=temp;
}
}
}
}
[/code]
程序在rank()那一行跑不起来,不知道这个函数哪里出了问题,大神求救啊!已哭晕在宿舍!
------解决思路----------------------
仅供参考
------解决思路----------------------
rank() 没问题,rank后面的代码出错另外
修改后
[code]
# include<stdio.h>
# include<string.h>
int main(){
void change(char string[10]);
void rank(char *string[3]);
int i;
char *pointer[3];
char word[3][10];
for(i=0; i<3; i++) pointer[i]=word[i];
printf("input 3 strings:\n");
for(i=0; i<3; i++){
if(!i) printf("input the 1st number(end it with.):\n");
else if(1==i) printf("inout the 2rd number:\n");
else if(2==i) printf("input the 3th number:\n");
scanf("%s", word[i]);
change(word[i]);
}
rank(pointer);
printf("after rank:\n");
for(i=0; i<3; i++) printf("%s", *pointer[i]);
putchar('\n');
return 0;
}
void change(char string[10]){
int i=0;
while('.'!=string[i++]);
string[i]='\0';
}
void rank(char *string[3]){
int i, j, *temp;
for(i=0; i<3; i++){
for(j=0; j<2-i; j++){
if(strcmp(string[j], string[j+1])>0){
temp=string[j];
string[j]=string[j+1];
string[j+1]=temp;
}
}
}
}
[/code]
程序在rank()那一行跑不起来,不知道这个函数哪里出了问题,大神求救啊!已哭晕在宿舍!
------解决思路----------------------
仅供参考
# include<stdio.h>
# include<string.h>
void change(char string[10]);
void rank(char *string[3]);
int main(){
int i;
char *pointer[3] = {0};
char word[3][10] = {0};
for(i=0; i<3; i++) pointer[i]=word[i];
printf("input 3 strings:\n");
for(i=0; i<3; i++)
{
#if 0
if(!i) printf("input the 1st number(end it with.):\n");
else if(1==i) printf("inout the 2rd number:\n");
else if(2==i) printf("input the 3th number:\n");
#else
printf("input the %d number(end it with.):\n", i + 1);
#endif
input:
scanf("%s", word[i]); //因为word[i]的长度只有10,所以输入不能超过10个字符
if(strlen(word[i]) >= 10)
{
printf("length must < 10, please rescaf\n");
goto input;
}
change(word[i]);//这个有点多余
}
rank(pointer);
printf("after rank:\n");
for(i=0; i<3; i++) printf("%s\n", pointer[i]);
putchar('\n');
return 0;
}
void change(char string[10]){
int i=0;
while('.'!=string[i++]);
string[i]='\0';
}
void rank(char *string[3]){
int i, j;
char temp[10] = {0};
for(j=0; j<2; j++){
if(strcmp(string[j], string[j+1])>0){
//temp=string[j];
strcpy(temp, string[j]);
//string[j]=string[j+1];
strcpy(string[j], string[j+1]);
//string[j+1]=temp;
strcpy(string[j+1], temp);
}
}
}
------解决思路----------------------
rank() 没问题,rank后面的代码出错另外
。。。。。。。。。。。。。。。
rank(pointer); //没错的
printf("after rank:\n");
for(i=0; i<3; i++) printf("%s", *pointer[i]); 把这个 *去掉
putchar('\n');
修改后
。。。。。。。。。。。。。。。
rank(pointer);
printf("after rank:\n");
for(i=0; i<3; i++) printf("%s", pointer[i]);
putchar('\n');