一尘不染

C中的自然排序-“字符串数组,包含数字和字母”

algorithm

寻找一种行之有效的生产算法。

即file_10.txt> file_2.txt

谢谢。


阅读 426

收藏
2020-07-28

共1个答案

一尘不染

我假设您已经知道C标准库qsort()功能:

void qsort(void *base,
           size_t nel,
           size_t width,
           int (*compar)(const void *, const void *);

最后一个参数是一个 函数指针
,这意味着您可以将任何函数传递给它。strcmp()实际上,您可以使用,但是这样可以给您ASCIIbetical,并且您特别想要自然排序。

在这种情况下,您可以轻松编写一个:

#include <ctype.h>

int natural(const char *a, const char *b)
{
    if(isalpha(*a) && isalpha(*b))
      {
        // compare two letters
      }
    else
      {
        if(isalpha(*a))
          {
            // compare a letter to a digit (or other non-letter)
          }
        else if(isalpha(*b))
          {
            // compare a digit/non-letter to a letter
          }
        else
          {
            // compare two digits/non-letters
          }
      }
}

else如果您很return早就可以清除某些s
,但是有一个基本结构。检查ctype.h像功能isalpha()(如果一个字符是字母的一部分)isdigit()isspace()以及更多。

2020-07-28