【问题标题】:Sorting an array of strings in c using pointers使用指针对c中的字符串数组进行排序
【发布时间】:2019-12-07 23:02:13
【问题描述】:

所以我想对一个字符串数组进行排序,但我不知道如何将它传递给函数。另外,如果使用指针,这段代码的等价物是什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void sort(int *s)
{
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
           if(strcmp(s[i],s[j])>0)
           {
               char aux[100];
               strcpy(aux,s[i]);
               strcpy(s[i],s[j]);
               strcpy(s[j],s[i]);
           }


}
int main()
{
   char s[3][100];

   for(int i=0;i<3;i++)
      scanf("%s",s[i]);
sort(s);


    return 0;
}

【问题讨论】:

标签: c arrays sorting


【解决方案1】:
void sort(int *s)
{
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
           if(strcmp(s + i,s+j)>0)
           {
               char aux[100];
               strcpy(aux,s+i);
               strcpy(s+i,s+j);
               strcpy(s+i,aux);
           }


}
int main()
{
    char s[3][100];

    for(int i=0;i<3;i++)
      scanf("%s",s+i);

    sort(s);


    return 0;
}

不管怎样,你的程序有一个错误:

strcpy(aux,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],s[i]);

应该是:

strcpy(aux,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],aux);

【讨论】:

    【解决方案2】:

    下面的 sn -p 修复了sort 函数中的错误并使用了指针:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void sort(char ** s, unsigned int size) {
    
      for(unsigned int i=0 ; i<size ; i++) {
        for(unsigned int j=i+1 ; j<size ; j++) {
          if(strcmp(s[i],s[j])>0) {
            char aux[100];
            strcpy(aux,s[i]);
            strcpy(s[i],s[j]);
            strcpy(s[j],aux);
          }
        }
      }
    
    }
    
    int main() {
    
      unsigned int string_number = 3;
      unsigned int string_max_size = 100;
      char ** s = (char **) malloc(string_number*sizeof(char*));
    
      for(unsigned int i=0 ; i<string_number ; i++) {
        s[i] = (char*) malloc(string_max_size*sizeof(char));
        scanf("%s", s[i]);
      }
    
      sort(s, string_number);
    
      for(unsigned int i=0 ; i<string_number ; i++) {
          for(unsigned int i=0 ; i<string_number ; i++) {
          printf("%s\n", s[i]);
          free(s[i]);
      }
    
      free(s);
    
      return 0;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      相关资源
      最近更新 更多