您的位置:首页 > 运维架构 > Linux

Linux下常用函数-字符串函数(一)

2014-05-08 08:57 288 查看
atof(将字符串转换成浮点型数)

相关函数 atoi,atol,strtod,strtol,strtoul

表头文件 #include <stdlib.h>

定义函数 double atof(const char *nptr);

函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。

返回值 返回转换后的浮点型数。

附加说明 atof()与使用strtod(nptr,(char**)NULL)结果相同。

范例

#include<stdlib.h>

main()

{

char *a=”-100.23”;

char *b=”200e-2”;

float c;

c=atof(a)+atof(b);

printf(“c=%.2f\n”,c);

}

执行 c=-98.23

 

atoi(将字符串转换成整型数)

相关函数 atof,atol,atrtod,strtol,strtoul

表头文件 #include<stdlib.h>

定义函数 int atoi(const char *nptr);

函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。

返回值 返回转换后的整型数。

附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。

范例

#include<stdlib.h>

mian()

{

char a[]=”-100”;

char b[]=”456”;

int c;

c=atoi(a)+atoi(b);

printf(c=%d\n”,c);

}

执行 c=356

 

atol(将字符串转换成长整型数)

相关函数 atof,atoi,strtod,strtol,strtoul

表头文件 #include<stdlib.h>

定义函数 long atol(const char *nptr);

函数说明 atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。

返回值 返回转换后的长整型数。

附加说明 atol()与使用strtol(nptr,(char**)NULL,10);结果相同。

范例

#include<stdlib.h>

main()

{

char a[]=”1000000000”;

char b[]=” 234567890”;

long c;

c=atol(a)+atol(b);

printf(“c=%d\n”,c);

}

执行 c=1234567890

 

gcvt(将浮点型数转换为字符串,取四舍五入)

相关函数 ecvt,fcvt,sprintf

表头文件 #include<stdlib.h>

定义函数 char *gcvt(double number,size_t ndigits,char *buf);

函数说明 gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。

返回值 返回一字符串指针,此地址即为buf指针。

附加说明

范例 #include<stdlib.h>

main()

{

double a=123.45;

double b=-1234.56;

char *ptr;

int decpt,sign;

gcvt(a,5,ptr);

printf(“a value=%s\n”,ptr);

ptr=gcvt(b,6,ptr);

printf(“b value=%s\n”,ptr);

}

执行 a value=123.45

b value=-1234.56

 

strtod(将字符串转换成浮点数)

相关函数 atoi,atol,strtod,strtol,strtoul

表头文件 #include<stdlib.h>

定义函数 double strtod(const char *nptr,char **endptr);

函数说明 strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。

返回值 返回转换后的浮点型数。

附加说明 参考atof()。

范例

#include<stdlib.h>

mian()

{

char a[]=”1000000000”;

char b[]=”1000000000”;

char c[]=”ffff”;

printf(“a=%d\n”,strtod(a,NULL,10));

printf(“b=%d\n”,strtod(b,NULL,2));

printf(“c=%d\n”,strtod(c,NULL,16));

}

执行 a=1000000000

b=512

c=65535

 

strtol(将字符串转换成长整型数)

相关函数 atof,atoi,atol,strtod,strtoul

表头文件 #include<stdlib.h>

定义函数 long int strtol(const char *nptr,char **endptr,int base);

函数说明 strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。

返回值 返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。

附加说明 ERANGE指定的转换字符串超出合法范围。

范例

#include<stdlib.h>

main()

{

char a[]=”1000000000”;

char b[]=”1000000000”;

char c[]=”ffff”;

printf(“a=%d\n”,strtol(a,NULL,10));

printf(“b=%d\n”,strtol(b,NULL,2));

printf(“c=%d\n”,strtol(c,NULL,16));

}

执行 a=1000000000

b=512

c=65535

 

strtoul(将字符串转换成无符号长整型数)

相关函数 atof,atoi,atol,strtod,strtol

表头文件 #include<stdlib.h>

定义函数 unsigned long int strtoul(const char *nptr,char **endptr,int base);

函数说明 strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。

返回值 返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。

附加说明 ERANGE指定的转换字符串超出合法范围。

范例 参考strtol()

 

toascii(将整型数转换成合法的ASCII 码字符)

相关函数 isascii,toupper,tolower

表头文件 #include<ctype.h>

定义函数 int toascii(int c)

函数说明 toascii()会将参数c转换成7位的unsigned char值,第八位则会被清除,此字符即会被转成ASCII码字符。

返回值 将转换成功的ASCII码字符值返回。

范例 #include<stdlib.h>

main()

{

int a=217;

char b;

printf(“before toascii () : a value =%d(%c)\n”,a,a);

b=toascii(a);

printf(“after toascii() : a value =%d(%c)\n”,b,b);

}

执行 before toascii() : a value =217()

after toascii() : a value =89(Y)

 

tolower(将大写字母转换成小写字母)

相关函数 isalpha,toupper

表头文件 #include<stdlib.h>

定义函数 int tolower(int c);

函数说明 若参数c为大写字母则将该对应的小写字母返回。

返回值 返回转换后的小写字母,若不须转换则将参数c值返回。

附加说明

范例

#include<ctype.h>

main()

{

char s[]=”aBcDeFgH12345;!#$”;

int i;

printf(“before tolower() : %s\n”,s);

for(i=0;I<sizeof(s);i++)

s=tolower(s);

printf(“after tolower() : %s\n”,s);

}

执行 before tolower() : aBcDeFgH12345;!#$

after tolower() : abcdefgh12345;!#$

 

toupper(将小写字母转换成大写字母)

相关函数 isalpha,tolower

表头文件 #include<ctype.h>

定义函数 int toupper(int c);

函数说明 若参数c为小写字母则将该对映的大写字母返回。

返回值 返回转换后的大写字母,若不须转换则将参数c值返回。

附加说明

范例

#include<ctype.h>

main()

{

char s[]=”aBcDeFgH12345;!#$”;

int i;

printf(“before toupper() : %s\n”,s);

for(i=0;I<sizeof(s);i++)

s=toupper(s);

printf(“after toupper() : %s\n”,s);

}

执行 before toupper() : aBcDeFgH12345;!#$

after toupper() : ABCDEFGH12345;!#$

bcmp(比较内存内容)

相关函数bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp

表头文件#include<string.h>

定义函数int bcmp ( const void *s1,const void * s2,int n);

函数说明bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则

返回0。

返回值若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回

非零值。

附加说明建议使用memcmp()取代。

范例参考memcmp()。

bcopy(拷贝内存内容)

相关函数memccpy,memcpy,memmove,strcpy,ctrncpy

表头文件#include <string.h>

定义函数void bcopy ( const void *src,void *dest ,int n);

函数说明bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节

到dest所指的地址,不过参数src与dest在传给函数时是相反的位

置。

返回值

附加说明建议使用memcpy()取代

范例#include<string.h>

main()

{

char dest[30]=”string(a)”;

char src[30]=”string\0string”;

int i;

bcopy(src,dest,30);

printf(bcopy(): “)

for(i=0;i<30;i++)

printf(“%c”,dest[i]);

memcpy(dest src,30);

printf(‘\nmemcpy() : “);

for(i=0;i<30;i++)

printf(“%c”,dest[i]);

执行bcopy() : string string

memcpy() :string sring

bzero(将一段内存内容全清为零)

相关函数memset,swab

表头文件#include<string.h>

定义函数void bzero(void *s,int n);

函数说明bzero()会将参数s所指的内存区域前n个字节,全部设为零值。相当

于调用memset((void*)s,0,size_tn);

返回值

附加说明建议使用memset取代

范例参考memset()。

index(查找字符串中第一个出现的指定字符)

相关函数rindex,srechr,strrchr

表头文件#include<string.h>

定义函数char * index( const char *s, int c);

函数说明index()用来找出参数s字符串中第一个出现的参数c地址,然后将该

字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部

分。

返回值如果找到指定的字符则返回该字符所在地址,否则返回0。

范例#include<string.h>

main()

{

char *s =”0123456789012345678901234567890”;

char *p;

p =index(s,’5’);

printf(%s\n”,p);

}

执行5.68E+25

memccpy(拷贝内存内容)

相关函数bcopy,memcpy,memmove,strcpy,strncpy

表头文件#include<string.h>

定义函数void * memccpy(void *dest, const void * src, int c,size_t

n);

函数说明memccpy()用来拷贝src所指的内存内容前n个字节到dest所指的地址

上。与memcpy()不同的是,memccpy()会在复制时检查参数c是否出

现,若是则返回dest中值为c的下一个字节地址。

返回值返回指向dest中值为c的下一个字节指针。返回值为0表示在src所指

内存前n个字节中没有值为c的字节。

范例#include<string.h>

main()

{

char a[]="string[a]";

char b[]="string(b)";

memccpy(a,b,'B',sizeof(b));

printf("memccpy():%s\n",a);

}

执行memccpy():string(b)

memchr(在某一内存范围中查找一特定字符)

相关函数index,rindex,strchr,strpbrk,strrchr,strsep,strspn,

strstr

表头文件#include<string.h>

定义函数void * memchr(const void *s,int c,size_t n);

函数说明memchr()从头开始搜寻s所指的内存内容前n个字节,直到发现第一

个值为c的字节,则返回指向该字节的指针。

返回值如果找到指定的字节则返回该字节的指针,否则返回0。

范例#include <string.h>

main()

{

char *s="0123456789012345678901234567890";

char *p;

p=memchr(s,'5',10);

printf("%s\n",p);

}

执行5.68E+25

memcmp(比较内存内容)

相关函数bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp

表头文件#include<string.h>

定义函数int memcmp (const void *s1,const void *s2,size_t n);

函数说明memcmp()用来比较s1和s2所指的内存区间前n个字符。字符串大小的

比较是以ASCII码表上的顺序来决定,次顺序亦为字符的值。memcmp

()首先将s1第一个字符值减去s2第一个字符的值,若差为0则再继续

比较下个字符,若差值不为0则将差值返回。例如,字符

串"Ac"和"ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33)。

返回值若参数s1和s2所指的内存内容都完全相同则返回0值。s1若大于s2则

返回大于0的值。s1若小于s2则返回小于0的值。

范例#include<string.h>

main()

{

char *a ="aBcDeF";

char *b="AbCdEf";

char *c="aacdef";

char *d="aBcDeF";

printf("memcmp(a,b):%d\n",memcmp((void*)a,(void*) b,6));

printf("memcmp(a,c):%d\n",memcmp((void*)a,(void*) c,6));

printf("memcmp(a,d):%d\n",memcmp((void*)a,(void*) d,6));

执行memcmp(a,b):1

memcmp(a,c):-1

memcmp(a,d):0

memcpy(拷贝内存内容)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: