高级字符串查找

来源:互联网 发布:瑞珀网络机顶盒升级包 编辑:程序博客网 时间:2024/05/18 01:52
(以下三个函数都需要添加头文件<string.h>)
1.查找一个字符串前缀
strspn和strcspn函数用于在字符串的起始位置对字符计数。他们的原型如下:
size_t strspn( char const *str, char const *group );size_t strcspn( char const *str, char const *group );


group字符串指定一个或多个字符。strspn返回str起始部分匹配group任意字符的字符数目。例如,如果group包含了空格、制表符和空白字符,那么这个函数将返回str起始部分空白字符的数目。

如下面这个例子:

int len1, len2;char string[] = "25,142,330,Smith,J,239-4123";len1 = strspn( string, "0123456789" );len2 = strspn( string, ",0123456789" );
运行完以上程序后,变量len1将被设置为2,变量len2将被设置为11.下面的代码将计算一个指向字符串中第一个非空白字符的指针。

ptr = string + strspn( string, "\n\r\f\t\v" );

strcspn函数和strspn函数正好相反,它对str字符串起始部分中不与group中任何字符匹配的字符进行计数。下面的代码将计算一个指向字符串中第一个空白字符的指针。

ptr = string + strcspn( string, "\n\r\f\t\v" );

2.查找标记
一个字符串常常包含几个单独的部分,strtok函数则可以从字符串中隔离各个单独的称为标记(token)的部分,并丢弃分隔符。它的原型如下:
char *strtok( char *str, char const *sep );
sep参数是个字符串,定义了用作分隔符的字符标记。str参数指定一个字符串,它包含零个或多个由sep字符串中一个或多个分隔符分隔的标记。strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个指向这个标记的指针。需要注意的是,当strtok执行时,它会改变源字符串。如果源字符串不能被修改,那就传递源字符串的一份拷贝给strtok函数。
如果strtok函数的第一个参数不是NULL,函数将找到字符串的第一个标记。strtok同时将保存它在字符串中的位置。如果strtok函数的第一个参数是NULL,函数就在同一个字符串中从这个被保存的位置开始查找下一个标记。如果不存更多标记,strtok函数就返回一个NULL指针。
下面是一个简短的函数,这个函数将字符串的标记(用','分隔)一一打印出来。

//从一个字符数组中提取逗号分隔的标记并把他们打印出来void PrintTokens( char *line ){    char *token;        token = strtok( line, "," );    while( token!=NULL ){        puts(token);        token=strtok( NULL, "," );    }}


0 0
原创粉丝点击