?? cmpnum.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 + -