所以我需要对2d char数组的行进行排序。如果用户输入:
它应该返回
WXYZ
虽然我的排序方法存在问题。是否可以在不使用指针的情况下进行排序或是否应该使用指针?它甚至将所有用户输入存储到temp中,这很奇怪,因为它的长度为5。
#include <stdio.h>
#include <string.h>
void sortStr(char str[5][4]);
int main()
{
char str[5][4];
int i,r,c;
//user inputs 5 strings in 2d array.
for(i=0;i<5;i++)
{
printf("\nEnter a string %d: ",i+1);
scanf(" %[^\n]",&str[i]);
}
sortStr(str);
//display array
for(r = 0; r<5; r++)
{
for(c=0; c<4; c++)
{
printf("%c",str[r][c]);
}
printf("\n");
}
return 0;
}
void sortStr(char str[5][4])
{
int i, j;
char temp[5];
//this sorts each row based
for(i=0; i<5; i++){
printf("T1:\n");
for(j=i+1; j<4; j++)
{
printf("T2:\n");
if(strcmp(str[i],str[j]) > 0)
{
//testing where code crashes
printf("T3:\n");
strcpy(temp,str[i]);
printf("T4:\n");
printf("%s\n",temp);//temp has all user input. How?
strcpy(str[i],str[j]);//code crashes
printf("T5:\n");
strcpy(str[j],temp);
printf("T6:\n");
}
}
}
}
答案 0 :(得分:-1)
像这样使用qsort
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
char str[5][5];//5 for read 4 character + null-terminator
int i;
for(i=0;i<5;i++){
printf("\nEnter a string %d: ", i+1);
scanf(" %4[^\n]", str[i]);
}
qsort(str, 5, sizeof(*str), (int (*)(const void*, const void*))strcmp);
puts("");
for(i=0;i<5;i++){
puts(str[i]);
}
return 0;
}