正文

字符串内部查找函数2009-01-20 10:36:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/aurora/40609.html

分享到:

char* strchr( const char* str, int chr );在str中查找第一次出现的chr,没找到则返回0 char* strrchr( const char* str, int chr );在str中查找最后一次出现的chr,没找到则返回0 char* strstr( const char* str, const char* substr );在str中查找第一次出现的substr,没找到则返回0 size_t strspn( const char* str, const char* chrset );在str中查找第一个不包含在chrset中的字符的索引,即查找从str第一个字符开始的只包含chrset中字符的最长字符串字符数目 strspn( "cabbage", "abc" ) == 5; strspn( "cabbage", "dc" ) == 1; strspn( "cabbage", "d" ) == 0; strspn("cabbage", "a") == 0; strspn( "cabbage", "" ) == 0; strspn( "cabbage", "\0" ) == 0; strspn("cabbage", "abceg" ) == 7;//返回str长度 char* strspnp( const char* str, const char* chrset );和strspn功能一样,只是返回指针const char* str = "cabbage"strspnp( str, "abc" ) == str+5;strspnp( str, "dc" ) == str+1;strspnp( str, "d" ) == str+0;strspnp( str, "abceg" ) == 0; // 和strspn不一样 size_t strcspn( const char* str, const char* chrset );在str中查找第一次出现在chrset中的字符位置,没找到则返回str结尾的'\0'的位置strcspn( "xyzbxz", "abc" ) = 3strcspn( "xyzbxz", "xyz" ) = 0strcspn( "xyzbxz", "no match" ) = 6strcspn( "xyzbxz", "" ) = 6strcspn( "", "abc" ) = 0strcspn( "", "" ) = 0 char* strpbrk( const char* str, const char* chrset );和strcspn功能一样,只是返回指针strpbrk( "xyzbxz", "abc" ) = "xyzbxz"+3strpbrk( "xyzbxz", "xyz" ) = "xyzbxz"+0strpbrk( "xyzbxz", "no match" ) = 0 // 和strcspn不一样strpbrk( "xyzbxz", "" ) = 0 // 和strcspn不一样strpbrk( "", "abc" ) = 0 // strpbrk( "", "" ) = 0 // ------------------------ 假如想将 "123@456@789" 分割成 "123" "456" "789" 当用 strchr假如想将 "123@#456@#789" 分割成 "123" "456" "789" 当用 strstr假如想将 "123@456#789@#0" 分割成 "123" "456" "789" "" "0" 当用 strcspn假如想将 "123@456#789@#0" 分割成 "123" "456" "789" "0" 当用 strcspn/strspn 代码如下:(未曾测试过)#include <stdio.h>#include <string.h>#include <assert.h> void split001( const char* str, const char chr ){    const char* p1 = str;    for( const char* p2; (p2=strchr(p1,chr))!=0; p1=p2+1 )    {        printf( "\"%.*s\"\n", p2-p1, p1 );    }    printf( "\"%s\"\n", p1 );}void split002( const char* str, const char* substr ){    assert( *substr );    const size_t substrlen = strlen(substr);    const char* p1 = str;    for( const char* p2; (p2=strstr(p1,substr))!=0; p1=p2+substrlen )    {        printf( "\"%.*s\"\n", p2-p1, p1 );    }    printf( "\"%s\"\n", p1 );}void split003( const char* str, const char* substr ){    assert( *substr );    const char* p1 = str;    for( const char* p2; p2=p1+strcspn(p1,substr), *p2; p1=p2+1 )    {        printf( "\"%.*s\"\n", p2-p1, p1 );    }    printf( "\"%s\"\n", p1 );}void split004( const char* str, const char* substr ){    assert( *substr );    const char* p1 = str;    for( const char* p2; p2=p1+strcspn(p1,substr), *p2; p1=p2+strspn(p2,substr) )    {        printf( "\"%.*s\"\n", p2-p1, p1 );    }    printf( "\"%s\"\n", p1 );} int main( void ){    split001( "123@456@789", '@' );    printf( "---\n" );    split002( "123@#456@#789", "@#" );    printf( "---\n" );    split003( "123@456#789@#0", "@#" );    printf( "---\n" );    split004( "123@456#789@#0", "@#" );    printf( "---\n" );     return 0;} 转自:http://blog.vckbase.com/bruceteen/archive/2008/07/24/34495.html

阅读(5173) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册