如何使用strcmp对2d char数组的行(字符串)进行排序?

时间:2017-03-12 23:37:55

标签: c arrays sorting for-loop c-strings

所以我需要对2d char数组的行进行排序。如果用户输入:

  1. WXYZ
  2. ABDF
  3. ABCD
  4. LMNO
  5. QRST
  6. 它应该返回

    1. ABCD
    2. ABDF
    3. LMNO
    4. QRST
    5. 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");
                  }
              }
          }
      }
      

1 个答案:

答案 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;
}