常用字符串函数解析(三)
11.strcspn函数
Strcspn函数是用来计算str1字符串开始部分连续不匹配字符串str2元素的字符个数,该函数的原型为:
它的工作原理是:以字符串str2中的字符为匹配对象,从字符串str1的起始位置开始匹配,计算从起始位置连续不匹配字符的个数,如果有一个匹配,直接结束计算。
使用该函数需要注意的点:
(1)该函数的返回值是unsigned int类型;
(2)如果str1中包含的字符全部没有匹配上str2字符串,那么直接返回字符串str1的长度;
(3)如果str1字符串的第一个字符就匹配字符串str2,那么直接返回0。
使用代码实现strcspn函数:
12.strtok函数
Strtok函数是用来切割字符串的,只要是被切割符集合包含的切割符,该函数都可以将其作为切割标记,它的原型为:
它的工作原理是:从字符串str的起始位置开始,如果字符是分隔符集合中的字符,该函数就会将字符换成‘\0’,然后返回字符串的起始位置(如果字符串的起始位置就是分隔符,函数会自动跳过,继续往下查找分隔符)。第一次调用该函数,第一个参数为字符串的起始地址,以后再次调用,第一个参数为NULL,函数判断第一个参数为NULL时,会自动使用上次保存的地址,也就是分隔符后面的地址。
使用该函数需要注意的点:
(1)如果字符串的起始位置就是分隔符,函数会自动跳过,继续往下查找分隔符;
(2)当函数遇到第一个分隔符时,会将这个分隔符置为‘\0’,因此第一个参数不能使用const修饰;
(3)如果一个字符串中没有包含分隔符,虽然调用strtok函数没有找到分隔符,但是该函数是不会返回NULL(空指针)的,它会返回字符串的首地址,如果我们再次调用该函数,就会返回NULL。
我们尝试运行上述代码,由于分隔符为,或者:在调用函数切割str1字符串时,前面的4个字符将会被自动跳过,第一次运行strtok函数后,str1字符串将变为,,::abcd\0:eyia,:bcgki,:eke\0,而返回的是a对应的地址。这是因为strtok函数会将遇到的第一个分隔符置为\0(起始位置的除外)。
当我们第二次调用strtok函数时(strtok(NULL,“,:”)),由于是NULL空指针,函数内部的指针指向了第一个\0后面的:字符,函数从内部指针指向的位置开始切割。由于起始位置的字符是:所以自动跳过,然后将eyia后面的,置为\0,返回字符e对应的地址。
按照这种处理方式依次切割,直至函数的内部指针指向eke前面的:字符处,这时再次调用strtok函数(strtok(NULL,“,:”)),由于第一个参数是NULL空指针,所以从内部指针指向的位置开始切割,起始位置的字符是:所以自动跳过,直到遇到\0,切割结束,返回e字符对应的地址(注意此时由于函数的内部指针并没有指向\0,因此不会返回NULL),此次函数结束后,函数的内部指针会指向\0,如果我们再次调用strtok函数,就会返回空指针。
使用代码实现strtok函数:
13.strpbrk函数
Strpbrk函数时用来在一个字符串中寻找与另一个字符串任何一个字符相匹配的字符的位置,如果字符串中的所有字符都匹配不上另一个字符串的任何一个字符,返回NULL。该函数的原型为:
它的工作原理为:遍历字符串str1中的所有字符,如果该字符能够匹配到字符串str2中的任何一个字符,那么返回对应的位置,否则返回NULL,也就是空指针。
使用代码实现strpbrk函数:
14.atoi函数
Atoi函数是用来将字符串的数字转换为整型数字的,该函数的原型为:
它的工作原理是:将字符串对应的数字转换为整型,如果字符串不合法不能转换为int类型或者为空字符串,那么返回0。
使用该函数需要注意的点:
(1)如果字符串不合法或者为空字符串,返回值为0;
(2)如果字符串为数字0,返回值依然为0。
使用代码实现atoi函数:
其他的字符串处理函数基本上使用的场合不多或者不是很经常,当然我总结的也有不到位不正确的地方,欢迎各位大神批评指正。