本文共 8868 字,大约阅读时间需要 29 分钟。
注:下列例程执行结果由VC++6.0环境编译运行测试,确保验证无误。
函数原型:char *strcpy(char *destin, char *source);
函数功能:把含有’\0’结束符的字符串source(包含’\0’)复制到另一个地址空间destin。使用例程:
#include#include int main(void){ char string[10]={ 0}; char*str1="abcdefghi"; strcpy(string,str1); printf("%s\n",string); return 0;}
结果:
函数原型:char *strncpy(char *dest, char *src,size_tn);
函数功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。使用例程:
#include#include int main(void){ char string[10]={ 0}; char*str1="abcdefghi"; strncpy(string,str1,3); printf("%s\n",string); return 0;}
结果:
函数原型:char *strstr(char *str1, char *str2);
函数功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 返回值: 返回该位置的指针,如找不到,返回空指针 使用例程:#include#include int main(void){ char *str1 = "Borland International", *str2 = "nation", *ptr; ptr = strstr(str1, str2); printf("The substring is: %s\n", ptr); return 0;}
结果:
函数原型:int strcmp(char * str1,char * str2);
函数功能:比较两个字符串str1,str2 返回值:str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数 使用例程:int main(){ char dest[10]="abcd"; char *src="a23456"; char d2[8]="abcd"; int res; res=strcmp(dest, src); printf("res= %d \n", res); res=strcmp(dest, d2); printf("res= %d \n", res); return 0;}
结果:
函数原型:int strncmp(char *str1,char *str2,int count)
函数功能:对str1和str2中的前count个字符按字典顺序比较 返回值:小于0:str1<str2,等于0:str1=str2,大于0:str1>str2 使用例程:int main(){ char dest[10]="abcd"; char *src="a23456"; char d2[8]="abcd"; int res; res=strncmp(dest, src, 3); printf("res= %d \n", res); res=strncmp(dest, d2, 3); printf("res= %d \n", res); return 0;}
结果:
函数原型:char* strchr(char* str,char ch);
函数功能:找出str指向的字符串中第一次出现字符ch的位置 返回值:返回指向该位置的指针,如找不到,则返回空指针 使用例程:int main(){ char dest[10]="abcd"; char* rp; char ch= 'c'; rp=strchr(dest, ch); if(NULL == rp) printf("no %c exist", ch); else printf("pos of %c is %d\n", ch, (int)(rp-dest+1)); return 0;}
结果:
函数原型:size_t strlen ( const char *s);
函数功能:计算字符串s的(unsigned int型)长度,不包括’\0’在内 返回值:s的长度,不包括’\0’在内 使用例程:#include#include int main(void){ int i=0; char *he = "Hello,world"; i= strlen (he); printf ( "字符串长度为%d\n" ,i); return 0;}
结果:
函数原型:char* strcat(char * str1,char * str2);
函数功能:把字符串str2接到str1后面,str1最后的’\0’被取消使用例程:
#include#include int main(void){ char dest[5]="abcd"; char *src="123456"; strcat(dest, src); printf("dest= %s\n", dest); return 0;}
结果:
函数原型:char *strncat(char *dest, const char *src, size_t maxlen)
函数功能:将字符串src中前maxlen个字符连接到dest中 使用例程:#include#include int main(){ char dest[10]="abcd"; char *src="123456"; strncat(dest, src, 3); printf("dest= %s\n", dest); return 0;}
结果:
函数原型:void *memcpy(void *dest, const void *src, size_t n)
函数功能:内存拷贝 函数返回:指向dest的指针使用例程:
#include#include int main(){ char src[]="******************************"; char dest[]="abcdefghijlkmnopqrstuvwxyz0123456709"; char *ptr=NULL; printf("destination before memcpy:%s\n",dest); ptr=memcpy(dest,src,strlen(src)); if (ptr) printf("destination after memcpy:%s\n",dest); else printf("memcpy failed"); return 0;}
结果:
函数原型:void *memset(void *s, int c, size_t n)
函数功能:字符串中的n个字节内容设置为c 函数返回:指向dest的指针使用例程:
#include#include int main(){ char buffer[]="Hello world"; printf("Buffer before memset:%s\n",buffer); memset(buffer,'*',strlen(buffer)-1); printf("Buffer after memset:%s\n",buffer); return 0;}
结果:
函数原型:int memcmp(const void *buf1, const void *buf2, size_t n);
函数功能:比较内存区域buf1和buf2的前n个字节。 函数返回: 如果返回值 < 0,则表示 str1 小于 str2。 如果返回值 > 0,则表示 str2 小于 str1。 如果返回值 = 0,则表示 str1 等于 str2。#include#include int main(){ char *s1 = "Hello,Programmers!"; char *s2 = "Hello,Programmers!"; int r; r = memcmp(s1,s2,strlen(s1)); if(!r) printf("s1 and s2 are identical\n");/*s1等于s2*/ elseif(r<0) printf("s1 is less than s2\n");/*s1小于s2*/ else printf("s1 is greater than s2\n");/*s1大于s2*/ return 0;}
函数原型:char *strnset(char *s, int ch, size_t n)
函数功能:将字符串s中前n个字符设置为ch的值 返回值:指向s的指针 使用例程:int main(){ char dest[10]="abcdabc"; char* rp; char ch= 'F'; rp=strnset(dest, ch, 4); printf("after strnset dest is %s \n", rp); return 0;}
结果:
函数原型:char *strset(char *s, int ch)
函数功能:将字符串s中所有字符设置为ch的值 返回值:指向s的指针 使用例程:int main(){ char dest[10]="abcdabc"; char* rp; char ch= 'F'; rp=strset(dest, ch); printf("after strnset dest is %s \n", rp); printf("after strnset dest is %s \n", dest); return 0;}
函数原型:char *strtok(char *s1, const char *s2)
函数功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串 返回值:字符串s1中首次出现s2中的字符前的子字符串指针 strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为’\0’字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。 使用例程:int main(){ char dest[]="ab,cd,ef,c"; char* rp; char ch[]= ","; rp=strtok(dest, ch); while(NULL != rp) { printf("dest: %s ", dest); printf("rp: %s \n", rp); rp=strtok(NULL, ch); } return 0;}
说明:尽量使用可重入版的strtok,Windows平台下为strtok_s,Linux平台下为strtok_r。
牢记strtok函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。 在使用strtok前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。函数原型:char *strupr(char *s)
函数功能:将字符串s中的小写字母变为大写字母使用例程:
int main(){ char dest[]="ab,cd,EF,c"; char* rp; rp=strupr(dest); printf("dest: %s, rp: %s", dest, rp); return 0;}
结果:
函数原型:char *strlwr(char *s)
函数功能:将字符串s中的大写字母变为小写字母 使用例程:int main(){ char dest[]="ab,cd,EF,c"; char* rp; rp=strlwr(dest); printf("dest: %s, rp: %s", dest, rp); return 0;}
结果:
函数原型:char *strrchr(const char *s, int c)
函数功能:得到字符串s中最后一个含有c字符的位置指针 返回值:位置指针使用例程:
int main(){ char dest[10]="abcdabc"; char* rp; char ch= 'c'; rp=strrchr(dest, ch); if(NULL == rp) printf("no %c exist", ch); else printf("pos of %c is %d", ch, (int)(rp-dest+1)); return 0;}
结果:
函数原型:long strtol(char *str, char **endptr, int base);
函数功能:将串转换为长整型数 参数: str是要转换的字符 enptr是指向第一个不可转换的字符位置的指针 base基数,范围从2至36,或特殊值0。 返回值:转换结果注意点:
(1) 参数base代表采用的进制方式,如base值为10则采用10进制(字符串以10进制表示),若base值为16则采用16进制(字符串以16进制表示)。当base值为0时则默认采用10进制做转换,但遇到 ‘0x’ / ‘0X’ 前置字符则会使用 16 进制转换,遇到 ‘0’ 前置字符则会使用 8 进制转换。 (2) 若endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。函数执行流程:一开始strtol()会扫描参数str字符串,跳过前面的空格(只能跳空格,字母不行),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的str中的字符指针由endptr返回;若参数endptr为NULL,则表示该参数无效,或不使用该参数。
示例1:
#include#include int main(void){ char*str1="87654321"; char*str2="-87654321"; char*str3="+87654321"; char*endptr; long lnumber; lnumber=strtol(str1,&endptr,10); printf("str1=%s\nlong=%ld\n",str1,lnumber); lnumber=strtol(str2,&endptr,10); printf("str2=%s\nlong=%ld\n",str2,lnumber); lnumber=strtol(str3,&endptr,10); printf("str3=%s\nlong=%ld\n",str3,lnumber); return 0;}
运行结果:
示例2:
#include#include void test1(void){ char str[] = " 2030300 This is test"; char *ptr; long ret; ret = strtol(str, &ptr, 10); printf("数字(无符号长整数)是 %ld\n", ret); printf("字符串部分是 |%s|\n", ptr);}void test2(void){ char str[] = "abc2030300 This is test"; char *ptr; long ret; ret = strtol(str, &ptr, 10); printf("数字(无符号长整数)是 %ld\n", ret); printf("字符串部分是 |%s|\n", ptr);}int main(void){ test1(); test2(); return 0;}
运行结果:
示例3:
将字符串a, b, c 分别采用10, 2, 16进制转换成数字#include#include void main(){ char a[] = "100"; char b[] = "100"; char c[] = "ffff"; printf("a = %d\n", strtol(a, NULL, 10)); //100 printf("b = %d\n", strtol(b, NULL, 2)); //4 printf("c = %d\n", strtol(c, NULL, 16)); //65535}
运行结果:
函数原型:double strtod(char *str, char **endptr);
函数功能:将字符串转换为double型值 返回值:示例:
#include#include int main(void){ char* input="5.45",*endptr; double value; value=strtod(input,&endptr); printf("Thestringis%s\nthenumberis%lf\n",input,value); return 0;}
结果:
函数原型: char *strrev(char *s)
函数功能: 将字符串中的所有字符颠倒次序排列 函数返回: 指向s的指针示例:
#include#include int main(void){ char forward[]="string"; printf("Before strrev():%s\n",forward); strrev(forward); printf("After strrev():%s\n",forward); return 0;}
转载地址:http://uvxnz.baihongyu.com/