C中字符串操作函数
strtok函数
char *strtok(char *s, const char *delim);
函数说明:strtok()用来将字符串分割成一个个判断。参数s指向与分割的字符串,参数delim则为分割字符串,当strtok在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0字符。在第一次调用时,strtok()必须基于参数s字符串,往后的调用则将参数设置为null。每次调用成功则返回下一个分割后的字符串指针。
返回值:返回一个分割后的字符串指针,如果已无从分割则返回null。
strstr函数
char *strstr(char *str, char *substr);
函数说明:strstr()用来检索子串在字符串中首次出现的位置。参数str为要检索的字符串,substr为要检索的子串。
返回值:返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回null。
strspn函数
size_t strspn(const char *str, const char *accept);
函数说明:strspn()从参数str字符串的开头计算连续的字符,而这些字符都完全是accept所指字符串中的字符。即若strspn()返回的数值为n,则代表字符串str开头连续有n个字符都属于字符串accept内的字符。
返回值:返回字符串str开头连续包含字符串accept内的字符数目。故如果str所包含的字符都属于accept,那么返回str长度,如果str的第一个字符不属于accept,返回0。
strrchr函数
char *strrchr(const char *str, int c);
函数说明:strrchr()用于查找某个字符在字符串中最后一次出现的位置。参数str为要查找的字符串,c为要查找的字符。
返回值:如果找到就返回该字符最后一次出现的位置,否则返回null。
注意:字符串str的结束标志nul也会被纳入检索范围,所以str的租后一个字符也可以被定位。
strpbrk函数
char *strpbrk(char *s1, char *s2);
函数说明:strpbrk()用于检索两个字符串中首个相同的字符的位置。从s1的第一个字符向后检索,直到’\0’,如果当前字符存在于s2中,那么返回当前字符的地址,并停止检索。
返回值:如果s1、s2含有相同的字符,那么返回指向s1中第一个相同字符的指针,否则返回null。
注意:strpbrk()不会对结束符’\0’进行检索。
strncpy函数
char *strncpy(char *dest, const char *src, size_t n);
函数说明:strncpy()用来复制字符串的前n个字符。dest为目标字符串指针,src为源字符串指针。它会将字符串str前n个字符拷贝到字符串dest,不想strcpy(),strncpy()不会像dest追加结束标记’\0’,这会引发很多不合常理的问题。
返回值:返回字符串dest。
注意:src和dest所指的内存区域不能重叠,且dest必须有足够的空间放置n个字符。
strncat函数
char *strncat(char *dest, const char *src, size_t n);
函数说明:strncat()用于将n个字符追加到字符串的结尾。它将会从字符串src的开头拷贝n个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。如果n大于字符串src的长度,那么仅将src全部追加到dest尾部。它会将dest字符串最后的’\0’覆盖掉,字符追加完成后,在追加’\0’。
返回值:返回字符串dest。
strncasecmp函数
int strncasecmp(const char *s1, const char *s2, size_t n);
函数说明:strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异。
返回值:若参数s1和s2字符串相同,则返回0;s1若大于s2,则返回大于0的值;s1若小于s2,则返回小于0的值。
strlen函数
unsigned int strlen(char *s);
函数说明:strlen()用于计算字符串的长度,其中不包括结束字符’\0’。
返回值:返回字符串s的字符数。
strdup函数
char *strdup(const char *s);
函数说明:strdup()会先用malloc()配置与参数s字符串相同的空间大小,然后将参数s字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。
返回值:返回一字符串指针,该指针指向复制后的新字符串地址。若返回null,表示内存不足。
strchr函数
char *strchr(const char *str, int c);
函数说明:strchr()将会找出str字符串中第一次出现的字符c的地址,然后将该地址返回。
返回值:如果找到指定的字符则返回该字符所在地址,否则返回null。
注意:字符串str的结束标志nul也会被纳入检索范围,所以str的组后一个字符也可以被定位。
strcspn函数
int strcspn(char *str, char *accept);
函数说明:strcspn()从字符串str的开头计算连续的字符,而这些字符都完全不在字符串accept中。简单地说,若strcspn()返回的数值为n,则代表字符串str开头连续有n个字符都不包含字符串accept中的字符。
返回值:返回字符串str开头连续不含字符串accept内的字符数目。
注意:如果str中的字符都没有在accept中出现,那么将返回str的长度;检索的字符时区分大小写的。
strcpy函数
char *strcpy(char *dest, const char *src);
函数说明:strcpy()会将参数src字符串拷贝至参数dest所指的地址。
返回值:返回参数dest的字符串起始地址。
注意:如果参数dest所指的内存空间不够大,可能会造成缓冲溢出(buffer overflow)的错误情况。
strcoll函数
int strcoll(const char *str1, const char *str2)
函数说明:strcoll()函数根据环境变量lc_collate所指定的文字排列次序来比较字符串。其中参数str1,str2是要进行比较的两个字符串。默认情况下,lc_collate为“posix”或“c”,strcoll()和strcmp()一样根据ascii比较字符串大小。对于设置了lc_collate语言环境的情况下,则根据lc_collate设置的语言排序方式进行比较。如汉子会根据拼音进行比较。
返回值:若字符串str1和str2相同则返回0。若str1大于str2则返回大于0的值,否则返回小于0的值。
strcmp函数
int strcmp(const char *s1, const char *s2);
函数说明:strcmp()用来比较字符串(区分大小写)。s1和s2为需要比较的两个字符串。字符串大小的比较是以ascii码表上的顺序来决定的,此顺序亦为字符的值。strcmp()首先将s1第一个字符串减去s2第一个字符值,若差值为0,则再继续比较下个字符,若差值不为0,则将差值返回。
返回值:若参数s1和s2相同,则返回0;若s1大于s2,则返回大于0的值;若s1小于s2,则返回小于0的值。
注意:strcmp()以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,需使用strcoll()函数。
strcat函数
char *strcat(char *dest, const char *src);
函数说明:strcat()用于将参数src字符串复制到参数dest所指的字符串尾部,dest最后的结束字符null会被覆盖掉,并在连接后的字符串的尾部再增加一个null。
返回值:返回dest字符串起始地址。
注意:dest与src所指的内存空间不能重叠,且dest要有足够的空间来容纳要复制的字符串。
strcasecmp函数
int strcasecmp(const char *s1, const char *s2);
函数说明:strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
返回值:若参数s1和s2字符串相同则返回0;若s1长度大于s2长度则返回大于0的值;若s1长度小于s2长度则返回小于0的值。
rindex函数
char *rindex(const char *s, int c);
函数说明:rindex()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符null也被视为字符串一部分。
返回值:如果找到指定的字符则返回该字符所在的地址,否则返回0。
index函数
char *index(const char *s, int c);
函数说明:index()用来找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(null)也视为字符串一部分。
返回值:如果找到指定的字符则返回该字符所在地址,否则返回0。
toupper函数
int toupper(int c)
函数说明:若参数c为小写字母则将该对应的大写字母返回。
返回值:返回转换后的大写字母,若不须转换则将参数c值返回。
tolower函数
int tolower(int c);
函数说明:若参数c为大写字母则将该对应的小写字母返回。
返回值:返回转换后的小写字母,若不须转换则将参数c值返回。
toascii函数
int toascii(int c);
函数说明:toascii()会将参数c转换成7位的unsigned char值,第八位则会被清除,此字符即会被转换成ascii码字符。
返回值:将转换成功的ascii码字符值返回。
strtoul函数
unsigned long strtoul(const char *str, char **endptr, int base);
函数说明:strtoul()会将参数str字符串根据参数base来转换为无符号的长整型数(unsigned long)。参数base范围从2至36,或0。参数base代表str采用的进制方式,如base值为10则采用10进制,若base值为16则采用16禁止数等。它会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进,可以用isspace()函数来检测),直到遇上数字或正负号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。
返回值:返回转换后的无符号长整形数;如果不能转换或者str为空字符串,那么返回0;如果转换得到的值超出unsigned long int所能表示的范围,函数将返回ulong_max(在limits.h中定义),并将errno的值设置为erange。
注意:1)当base的值为0时,默认采用10进制转换,但如果遇到‘0x’或‘0x’前置字符这幅使用16进制转换,遇到‘0’前置字符则会使用8进制转换;2)若endptr不为null,则会将遇到的不同符合条件而终止的字符指针有endptr传回;若endptr为null,则表示该参数无效,或不使用该参数。
strtol函数
long int strtol(const char *str, char **endptr, int base);
函数说明:strtol()会将参数str字符串根据参数base来转换成长整型数(long)。参数base范围从2至36,或0。参数base代表str采用的禁止方式,如base值为10则采用10进制,若base值为16,则采用16进制等。它会扫描参数str字符串,跳出前面的空白字符(如空格,tab缩进等,可以通过isspace()函数来检测),直到遇到数字或正负符号才开始做转换,在遇到非数字或字符串结果是‘\0’结束转换,并将结果返回。
返回值:返回转换后的长整型数;如果不能转换或者str为空字符串,那么返回0(0l);如果转换得到的值超出long int所能表示的范围,函数返回long_max或long_min(在limits.h头文件中定义),并将errno的值设置为erange。
注意:1)当base的值为0时,默认采用10进制转换,但如果遇到‘0x’或‘0x’前置字符这幅使用16进制转换,遇到‘0’前置字符则会使用8进制转换;2)若endptr不为null,则会将遇到的不同符合条件而终止的字符指针有endptr传回;若endptr为null,则表示该参数无效,或不使用该参数。
strtod函数
double strtod(const char *str, char **endptr);
函数说明:strtod()函数会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时‘\0’才结束转换,并将结果返回。参数str字符串可包含正负号,小数点或e(e)来表示指数部分。如123.456或123e-2。若endptr不为null,则会将遇到的不符合条件而终止的字符串由endptr传回;若endptr为null,则表示该参数无效,或不使用该参数。
返回值:返回转换后的浮点型数;若不能转换或字符串为空,则返回0.0。
gcvt函数
char *gcvt(double number, size_t ndigits, char *buf);
函数说明:gcvt()用来将参数number转换成ascii码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。
返回值:返回一字符串指针,此地址为buf指针。
atol函数
long atol(const char *str);
函数说明:atol会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进等,可以isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时‘\0’才结束转换,并将结果返回。
返回值:返回转换后的长整型数long;如果str不能转换成long或者str为空字符串,那么将返回0。
atoi函数
int atoi(const char *str);
函数说明:atoi()会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而遇到非数字或字符结束时‘\0’才结束转换,并将结果返回。
返回值:返回转换后的整型数;如果str不能转换为int或者str为空字符串,那么将返回0。
atof函数
double atof(const char *str);
函数说明:atof()用于将字符串转换为双精度浮点数(double)。它会扫描参数str字符串,跳过前面的空白字符串(如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始转换,而再遇到非数字或字符串结束时‘\0’才结束转换,并将结果返回。参数str字符串可包含正负号、小数或e(e)来表示指数部分,如123.456或123e-2。
返回值:返回转换后的浮点数;如果字符串str不能被转换为double,那么返回0.0。