⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpnum.c

📁 linux下Qsort的C语 言的实现
💻 C
字号:
#include "cmpnum.h"
#include <string.h>
#include<math.h>
#include<stdlib.h>
#include<float.h>

int lenb4dot(const char * sp)
{
     int len=1;
     int p_n=1;
     int i=0;
     if(*sp=='-')
      {
           p_n=-1;
           i++;
      }
     while(sp[i]=='0') i++;
     while(sp[i]>='0'&& sp[i]<='9')
      {
           len++;
           i++;
      }
     return p_n*len;
}

const char * discard_b4_dot(const char * p)
{
     if(*p=='-') p++;
     if(*p=='0') p++;
     if(*p=='.') p++;
     return p;
}

char * todstr2(char * p)
{
     char *tmp=p;
     int j=0;
     while(*p=='0')p++;
     if(*p=='.'&&p>tmp)
      {
           p--;
           *p='0';
      }
     while(p[j]>='0'&& p[j]<='9')j++;
     if(p[j]!='.')
      {
         if(j==0)
           {
                tmp[0]='0';
                tmp[1]=0;
                p=tmp;
           }
         else p[j]=0;
         return p;
      }
     j++;
     while(p[j]>='0'&&p[j]<='9')j++;
     while(p[j-1]=='0') j--;
     if(p[j-1]=='.') j--;
     p[j]=0;
     return p;
}

char * todoubstr(char * p)
{
     char *p2;
     if(*p=='-')
      {
         p2=todstr2(p+1);
         p2--;
         *p2='-';
      }
     else p2=todstr2(p);
     return p2;
}

int cmpnum(const void * p1,const void * p2)
{
     int len1=lenb4dot(* (char * const *)p1);
     int len2=lenb4dot(* (char * const *)p2);
     if(len1>len2) return 1;
     else if(len1<len2) return -1;
     else if(len1>1||len1<-1)return len1*cmpstring(p1, p2);
     return len1*strcmp(discard_b4_dot(* (char * const *)p1), discard_b4_dot(* (char * const *)p2));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -