字符串内部查找函数
来源:互联网 发布:海关数据公开 编辑:程序博客网 时间:2024/05/21 23:56
字符串内部查找函数(发表时间: 2009-1-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" ) = 3
strcspn( "xyzbxz", "xyz" ) = 0
strcspn( "xyzbxz", "no match" ) = 6
strcspn( "xyzbxz", "" ) = 6
strcspn( "", "abc" ) = 0
strcspn( "", "" ) = 0
char* strpbrk( const char* str, const char* chrset );
和strcspn功能一样,只是返回指针
strpbrk( "xyzbxz", "abc" ) = "xyzbxz"+3
strpbrk( "xyzbxz", "xyz" ) = "xyzbxz"+0
strpbrk( "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
- 字符串内部查找函数
- 字符串内部查找函数
- 字符串内部查找函数
- C++字符串内部查找函数
- PHP 常用字符串内部函数
- 字符串分隔 查找函数
- C 字符串查找函数
- 字符串查找函数
- strstr字符串查找函数
- C 字符串查找函数
- 字符/字符串 查找函数
- java 字符串查找函数
- 常用字符串查找函数
- 字符串查找函数 find()函数
- 查找字符/字符串的函数
- c++编写字符串查找函数
- C语言字符串查找函数
- C/C++字符串查找函数
- 【转】Appache loglevel
- 【转】日志级别与日志信息
- ZOJ 3594 Sexagenary Cycle
- Linux下查看内存
- 【转】linux+eclipse下开发QT
- 字符串内部查找函数
- [转载]int,int32_t,int64_t
- av_read_frame
- [转]rtsp交互命令简介及过程参数描述
- QT4初学习
- 【转】ffmpeg解码含有B帧的视频文件的输出顺序
- 视频容器格式
- 理解进程和线程
- DTS/PTS