C/C++/MFC 字符串查询

一、C 风格字符串查询

1. char[] 字符串 (C库函数)
1.1 strstr (在字符串中查找子串首次出现的位置)

原型:const char * strstr ( const char * str1, const char *str2);

参数:str1,待查找的字符串指针;
str2,要查找的字符串指针。

说明:在str1中查找匹配str2的子串,并返回指向首次匹配时的第一个元素指针。如果没有找到,返回NULL指针。

用例:

char str1[]="abcdef";
char *str2=strstr(str1,"cd");
cout << str2 << endl;
// 结果:cdef

1.2 strspn (检索字符串中首次不存在另一个字符串任意字符的位置)
原型:size_t strspn ( const char * str1, const char * str2);

参数:str1,待查找的字符串指针;
str2,要查找的字符串指针。

说明:从str1的第一个字符开始算起,直到出现一个不在str2中的字符为止,返回字符个数。
用例:

   const char str1[] = "abcdef";
   const char str2[] = "ab";
   int len = strspn(str1, str2);
   // 结果:len = 2;

1.3 strcspn (查询字符串自开始位置起,连续不存在于另一字符串中的字符个数)
原型:size_t strcspn ( const char * str1, const char * str2);

参数:str1,待查找的字符串指针;
str2,要查找的字符串指针。

说明:从参数str1字符串的开头计算连续的字符,而这些字符都完全不在参数str2 所指的字符串中。简单地说, 若strcspn()返回的数值为n,则代表字符串str1开头连续有n 个字符都不含字符串str2 内的字符。
用例:

   const char str1[] = "abcdef";
   const char str2[] = "de";
   int len = strcspn(str1, str2);
   // 结果:len = 3;

1.4 strchr(在一个串中查找给定字符的第一个匹配之处)
原型:const char * strchr ( const char * str, int character);

参数:str,待查找字符串指针;
character,要查找的值。

说明:在字符串str中查找character,返回指向和character首次匹配的元素指针,如果没有找到,返回NULL指针。
用例:

   const char str1[] = "abcdef";  
   char ch = 'e';
   const char* pos= strchr(str1, ch);
   if(NULL != ch)
  	printf("%s\n", pos);
   else
  	printf("Not Found!");
  // 结果:ef

1.5 strrchr (查找字符在指定字符串中从右面开始的第一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。)

原型:size_t strcspn (const char *str, int character);

参数:str,待查找的字符串指针;
character,要查找的字符串指针。

说明:查找字符character在字符串str中最后一次出现的位置(也就是从str的右侧开始查找字符character首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。
用例:

   const char str1[] = "abcdefeg";  
   char ch = 'e';
   const char* pos= strschr(str1, ch);
   if(NULL != ch)
   printf("%s\n", pos);
   else
   printf("Not Found!");
  // 结果:eg

1.6 strpbrk(在源字符串(str1)中找出最先含有搜索字符串(str2)中任一字符的位置并返回,若找不到则返回空指针。)

原型:const char * strpbrk (const char * str1, const char * str2);

参数:str1,待查找的字符串指针;
str2,要查找的字符串指针。

说明:依次检验字符串str1中的字符,当被检验字符在字符串str2中也包含时,则停止检验,并返回该字符位置,空字符NULL不包括在内。
用例:

char str1[]="abcdef";
char *str2=strpbrk(str1,"de");
cout << str2 << endl;
// 结果:def

二、C++(标准) 字符串查询

2. string 字符串
2.1 find()
在一个字符串中查找一个指定的单个字符或字符数组。如果找到,就返回首次匹配的开始位置;如果没有查找到匹配的内容,就返回string::npos。
2.2 rfind()
对一个串从尾至头查找一个指定的单个字符或字符组。如果找到,就返回首次匹配的开始位置;如果没有查找到匹配的内容,则返回npos。
2.3 find(string, int)
第一个参数用来指示要查找的字符,第二个参数用来表示从字符串的何处开始查找子串(默认的查找位置是0)。
2.4 find_first_of()
在一个目标串中进行查找,返回值是第一个与指定字符组中任何字符匹配的字符位置。如果没有查找到匹配的内容,则返回npos。
2.5 find_last_of()
在一个目标串中进行查找,返回最后一个与指定字符组中任何字符匹配的字符位置。如果没有查找到匹配的内容,则返回npos。
2.6 find_first_not_of()
在一个目标串中进行查找,返回第一个与指定字符组中任何字符都不匹配的元素位置。如果找不到那样的元素则返回npos。
2.7 find_last_not_of()
在一个目标串中进行查找,返回下标值最大的与指定字符组中任何字符都不匹配的元素的位置。若找不到那样的元素则返回npos。
参考文章:http://www.cnblogs.com/fnlingnzb-learner/p/5831454.html

三、MFC 字符串查询

3. CString 字符串
CString之Find()、FindOneOf()、ReverseFind() ,三个函数返回值均为整数int。
3.1 Find()
该函数从左侧0索引开始,查找第一个出现的字符位置,返回position。示例如下:

CString s( "abcd" ); 
ASSERT( s.Find( 'b' ) == 1 ); 

返回值:如果查到,返回以0索引起始的位置未查到,返回-1 。

3.1 FindOneOf()
给定一字符串,然后查找其中出现的第一个字符位置,示例如下:

CString s( "abcdef" ); 
ASSERT( s.FindOneOf( "zb" ) == 1 ); 

返回值: 如果查到,返回以0索引起始的位置未查到,返回-1 。

3.3 ReverseFind()
该函数反向查找字符出现的位置。示例如下:

CString s( "abcd" ); 
ASSERT( s.ReverseFind( 'b' ) == 2 );

返回值: 如果查到,返回以0索引起始的位置未查到,返回-1 。

CString补充:CString之Left()、Mid()、Right()
查找完成后,了解字符串截取。CString有如下几个字符串截取函数。
1. Left(int nCount)
该函数截取左侧nCount个字符,如果遇到双字节字符(下面Mid和Right同样理解),比如中文,则可能会截断乱码。因为nCount是按照字节计数的。
2. Mid(int nFirst)和Mid( int nFirst, int nCount)
Mid(int nFirst)函数截取从nFirst开始,直到字符串结束的字符串。
Mid( int nFirst, int nCount)函数则截取从nFirst开始,截取nCount个字节字符。
3. Right(int nCount)
该函数截取右侧nCount个字节字符。
Left()、Mid()、Right()函数示例如下:

 CString s="abcdefg";
 CString s1=s.Left(3);    //abc
 CString s2=s.Mid(3);     //defg
 CString s3=s.Right(3);   //efg 

参考文章:http://msdn.microsoft.com/en-us/library/aa315043%28v=vs.60%29

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值