📄 strlib.c
字号:
* Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *str_tolower(char *string){ char *ptr; int cunt,len; len=strlen(string); ptr=string; for(cunt=0;cunt<len;cunt++) { *ptr++=tolower(*ptr); } return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 把可以转换的字符转成大写. * Argument: * char *ch - 字符串. * Return : * char - 字符. * Comment : 系统的 islower(ch) 函数在 ch>0xe0 时也返回 2 , * 导致 toupper(ch) 函数错误. *----------------------------------------------------------------------------*/my_toupper(char ch){ if( (ch >= 'a') && (ch <= 'z')) ch = ch - 'a' + 'A'; return(ch);}/*----------------------------------------------------------------------------* * FUNCTION: 把可以转换的字符转成小写. * Argument: * char *ch - 字符. * Return : * char - 字符. * Comment : 系统的 islower(ch) 函数在 ch>0xe0 时也返回 2 , * 导致 tolower(ch) 函数错误. *----------------------------------------------------------------------------*/my_tolower(char ch){ if( (ch >= 'A') && (ch <= 'Z')) ch = ch - 'A' + 'a'; return(ch);}/****************************************************************************** * <第二章> 字符串转换函数. * ******************************************************************************//*----------------------------------------------------------------------------* * FUNCTION: 浮点数转成字串. * Argument: * double value - 浮点数. * char *string - 字符串. * int dec - 小数点位置. * int width - 浮点数宽度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *ftoa(double value,char *string,int dec,int width){ char *ptr,buff[2]; int i,j,len; ptr=(char *)fcvt(value,dec,&i,&j); len=strlen(ptr); if(i<1) { ins_str(ptr,0,1-i,"0000000000"); len=len+1-i; i=1; } if(j) { len++; strcpy(buff,"-"); } else *buff='\0'; if(dec>0) len++; *string='\0'; strcatm(string,space(width-len),buff,ptr,NULL); if(dec>0) ins_str(string,width-dec-1,1,"."); *(string+width)='\0'; return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 长整数转成字串. * Argument: * long value - 长整数. * char *string - 字符串. * int ch - 空格的替换字符. * int width - 长整数宽度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *ltoa(long value,char *string,int ch,int width){ char buffer[20]; strcpy(string,ftoa((double)value,buffer,0,width)); strcce(string,' ',(char)ch); return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 整型转成字串. * Argument: * int value - 整数. * char *string - 字符串. * int ch - 空格的替换字符. * int width - 整数宽度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *itoa(int value,char *string,int ch,int width){ char buffer[16]; strcpy(string,ftoa((double)value,buffer,0,width)); strcce(string,' ',(char)ch); return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 无符号长整型转成字串. * Argument: * unsigned long value - 无符号长整数. * char *string - 字符串. * int ch - 空格的替换字符. * int width - 无符号长整数宽度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *ultoa(unsigned long value,char *string,int ch,int width){ char buffer[20]; strcpy(string,ftoa((double)value,buffer,0,width)); strcce(string,' ',(char)ch); return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 无符号整型转成字串. * Argument: * unsigned int value - 无符号整数. * char *string - 字符串. * int ch - 空格的替换字符. * int width - 无符号整数宽度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *uitoa(unsigned int value,char *string,int ch,int width){ char buffer[16]; strcpy(string,ftoa((double)value,buffer,0,width)); strcce(string,' ',(char)ch); return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 数字字串转成带逗号分隔的字串(3位一组). * Argument: * char *string - 字符串. * int dec - 小数点位置. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *fstr_disp_buf(char *string,int dec){ static char buff[30]; char c; int len,i,j; i=21; len=strlen(string)-dec-1; if(dec==0) { len++; *(buff+i)='\0'; } else strcpy(buff+i,substr(string,len,dec+1)); i--; for(j=0;j<len;j++) { c=*(string+len-j-1); if(c=='-'||c=='+') { *(buff+i)=c; i--; if(j%3==0&&j!=0) { *(buff+i)=' '; i--; } } else { if(j%3==0&&j!=0) { if(isdigit(c)) *(buff+i)=','; else *(buff+i)=' '; i--; } *(buff+i)=c; i--; } } return(buff+i+1);}/*----------------------------------------------------------------------------* * FUNCTION: 浮点数转成带逗号分隔的字串(3位一组). * Argument: * double value - 浮点数. * char *string - 字符串. * int dec - 小数点位置. * int width - 数的宽度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *fstr_disp(double value,char *string,int dec,int width){ char buff[31]; ftoa(value,buff,dec,width); strcpy(string,fstr_disp_buf(buff,dec)); return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 双精度浮点数转成带逗号分隔的字串(3位一组). * Argument: * double je - 浮点数. * char *str - 字符串. * int bit - 小数点位置. * int len - 长度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *dtos(double je,char *str,int bit,int len){ int num,n,m,cunt; char string[31]; if(bit>=len) return(""); if(fzero_test(je,bit)) { if(bit) n=bit+1; else n=0; num=len-n; m=0; if(num%3==0&&num>0) m--; while(num/3) { num-=3; m++; } if(n) n--; if(n%3==0&&n>0) m--; while(n/3) { n-=3; m++; } strcpy(str,space(m+len)); } else strcpy(str,fstr_disp(je,string,bit,len)); return(str);}/*----------------------------------------------------------------------------* * FUNCTION: 浮点数转成带逗号分隔的字串(3位一组). * Argument: * double je - 浮点数. * char *str - 字符串. * int bit - 小数点位置. * int len - 长度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *ftos(double je,char *str,int bit,int len){ char string[30]; if(fzero_test(je,bit)) strcpy(str,space(len)); else strcpy(str,ftoa(je,string,bit,len)); return(str);}/*----------------------------------------------------------------------------* * FUNCTION: 整数转成带逗号分隔的字串(3位一组). * Argument: * int bs - 整数. * char *str - 字符串. * int c - 位置. * int len - 长度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *itos(int bs,char *str,int c,int len){ char string[10]; if(bs) strcpy(str,itoa(bs,string,c,len)); else strcpy(str,space(len)); return(str);}/*----------------------------------------------------------------------------* * FUNCTION: 长整数转成带逗号分隔的字串(3位一组). * Argument: * int bs - 长整数. * char *str - 字符串. * int c - 位置. * int len - 长度. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *ltos(long bs,char *str,int c,int len){ char string[12]; if(bs) strcpy(str,ltoa(bs,string,c,len)); else strcpy(str,space(len)); return(str);}/*----------------------------------------------------------------------------* * FUNCTION: 浮点数转成数字大写汉字字串. * Argument: * double value - 浮点数. * char *string - 字符串. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *fstr_dx(double value,char *string){ char *ptr; int c,cunt,len,sign=FALSE; *string='\0'; if(!fzero_test(value,2)) { if(value<0.0) value=-value; ptr=(char *)fcvt(value,2,&cunt,&cunt); strrev(ptr); if(*ptr=='0') strcat(string,"整"); for(cunt=0;(c=*(ptr+cunt));cunt++) { c=c-'0'; if(c) { len=strlen(string)-2; if(cunt==10&&memcmp(string+len,"万",2)==0) *(string+len)='\0'; strcat(string,substr(DXJW,cunt*2,2)); strcat(string,substr(DXSZ,c*2,2)); sign=TRUE; } else { if(sign) { strcat(string,"零"); sign=FALSE; } if(cunt==2||cunt==6||cunt==10) { len=strlen(string)-2; if(cunt==10&&memcmp(string+len,"万",2)==0) *(string+len)='\0'; strcat(string,substr(DXJW,cunt*2,2)); } } } len=strlen(string)-2; for(cunt=0;cunt<len/2;cunt+=2) { c=len-cunt; memcpy(ptr,string+cunt,2); memcpy(string+cunt,string+c,2); memcpy(string+c,ptr,2); } } else strcat(string,"零元整"); return(string);}/*----------------------------------------------------------------------------* * FUNCTION: * Argument: * char *string - 字符串. * char c - . * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *stos_ac(char *string,char c){ int len,i=0; len=strlen(string); for(i=0;i<len;i++) { if(*(string+i)!=' ') { if(i) *(string+i-1)=c; break; } } return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 测试浮点数值在截至小数点后某位的值是否为零. * Argument: * double value - 浮点数. * int dec - 小数点位置. * Return : * TRUE - 值为零. * FALSE - 值不为零. *----------------------------------------------------------------------------*/fzero_test(double f,int dec){ char *ptr,c; int cunt; ptr=(char *)fcvt(f,dec,&cunt,&cunt); for(cunt=0;(c=*(ptr+cunt));cunt++) { if(c!='0') return(FALSE); } return(TRUE);}/*----------------------------------------------------------------------------* * FUNCTION: 测试一子字串child在string中的位置(1...n). * Argument: * char *string - 字符串. * char *child - 字符串. * Return : * >0 - 子串的位置. * =0 - string中没有child. *----------------------------------------------------------------------------*/str_test(char *string,char *child){ int cunt,len,zs; len=strlen(child); zs=strlen(string)/len; for(cunt=0;cunt<zs;cunt++) { if(memcmp(child,string+cunt*len,len)==0) return(cunt+1); } return(0);}/*----------------------------------------------------------------------------* * FUNCTION: 测试字串是否为数字字串. * Argument: * char *string - 字符串. * Return : * TRUE - 是数字字串. * FALSE - 不是数字字串. *----------------------------------------------------------------------------*/numstr_test(char *string){ char c; int cunt; for(cunt=0;c=*(string+cunt);cunt++) { if(!isdigit(c)) return(FALSE); } return(TRUE);}/*----------------------------------------------------------------------------* * FUNCTION: 截取某子串转成整数值. * Argument: * char *string - 字符串. * int start - 开始位置. * int width - 宽度. * Return : * int - 整数值. *----------------------------------------------------------------------------*/subnum(char *string,int start,int width){ char num_buf[6]; if(width>5) return(0); memcpy(num_buf,string+start,width); *(num_buf+width)='\0'; return(atoi(num_buf));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -