Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用strcmp对2d字符数组的行(字符串)进行排序?_C_Arrays_Sorting_For Loop_C Strings - Fatal编程技术网

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

如何使用strcmp对2d字符数组的行(字符串)进行排序?,c,arrays,sorting,for-loop,c-strings,C,Arrays,Sorting,For Loop,C Strings,所以我需要对2d字符数组的行进行排序。如果用户输入: wxyz 阿布德夫 abcd lmno qrst 它应该会回来 abcd 阿布德夫 lmno qrst wxyz 虽然我对我的排序方法有问题。是否可以不使用指针进行排序,还是应该使用指针?它甚至将所有用户输入存储到temp中,这很奇怪,因为它的长度为5 #include <stdio.h> #include <string.h> void sortStr(char str[5][4]); in

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

  • wxyz
  • 阿布德夫
  • abcd
  • lmno
  • qrst
  • 它应该会回来

  • abcd
  • 阿布德夫
  • lmno
  • qrst
  • 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");
                }
            }
        }
    }
    
    #包括
    #包括
    void sortStr(char str[5][4]);
    int main()
    {
    char-str[5][4];
    int i,r,c;
    //用户在2d数组中输入5个字符串。
    
    对于(i=0;i使用
    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;
    }
    
    #包括
    #包括
    #包括
    内部主(空){
    char str[5][5];//5表示读取4个字符+空终止符
    int i;
    
    对于(i=0;iBig重要的一点:请记住,C中的字符串是终止的,并且数组中的终止符也需要空间。这意味着,如果有一个四个字符的数组,它只能容纳一个三个字符的字符串,因为第四个字符必须是终止符。如果在这样的数组中放置三个以上的字符,那么您将继续超出范围且行为未定义。如果不使用指针,您也无法真正使用数组。为什么不使用标准的
    qsort
    ?我对qsort不太熟悉。我还是初学者。您也是初学者吗?进行一点(重新)搜索怎么样?