一:实现之前先说一所find_first_not_of姊妹函数()

(1)find_first_of(string &str, size_type index = 0):(find_first_of的实现例如以下链接:find_first_of的源码)

查找在字符串中第一个与str中的某个字符匹配的字符。返回它的位置。搜索从index正向開始,假设没找到就返回string::npos

(2) find_first_not_of(cstring &str, size_type index = 0):

在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index正向開始

假设没找到就返回string::nops

(3)find_last_of(cstring &str, size_type index = 0) :

在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index逆向開始。假设没找到就返回string::nops

(4)find_last_not_of(cstring &str, size_type index = 0):

在字符串中查找最后一个与str中的字符都不匹配的字符,返回它的位置。搜索从index逆向開始。假设没找到就返回string::nops

(5)总计 (3) 和(4) 因为从index的逆向開始查找的,也相当于(1)和 (2)中的查找第一个

二:手动实现find_first_of()函数

 // 在字符串中查找第一个与str中的字符都不匹配的字符。返回它的位置。

//搜索从index開始。假设没找到就返回string::nops O(N^2)
int MyString::find_first_not_of(const char *str,size_t index)
{
if(NULL == str || index >=strLength)
return npos;
size_t i=0,j=0;
size_t tmp_len = strlen(str);
for(i=index;i<strLength;i++)
{
for(;j<tmp_len;j++)
{
if(p_str[i]==str[j])
break;
}
if(j==tmp_len)
break;// 依据跳出的内层for的条件推断,找到即结束循环
}
if(i==strLength)
return npos;// 未找到,// 依据跳出的内层for的条件推断。找到即结束循环
return i;
}
int MyString::find_first_not_of(const MyString& str,size_t index)
{
if(NULL == str || index >=strLength)
return npos;
size_t i=0,j=0;
for(i=index;i<strLength;i++)
{
for(;j<str.strLength;j++)
{
if(p_str[i]==str[j])
break;// 假设相等 本轮i就无效了。进行下一轮
}
if(j==str.strLength)
break;// 依据跳出的内层for的条件推断。找到即结束循环
}
if(i==strLength)
return npos;// 未找到,// 依据跳出的内层for的条件推断,找到即结束循环
return i;
}
int MyString::find_first_not_of(const char ch,size_t index)
{
if(NULL == ch || index >=strLength)
return npos;
size_t i=0;
for(i=index;i<strLength;i++)
{
if(p_str[i]!=ch)// 跟上面的稍微不同,找一个不等就能够了
break;
}
if(i==strLength)
return npos;// 未找到,// 依据跳出的内层for的条件推断,找到即结束循环
return i;
}

c++ string 之 find_first_not_of 源码的更多相关文章

  1. String类的源码分析

    之前面试的时候被问到有没有看过String类的源码,楼主当时就慌了,回来赶紧补一课. 1.构造器(构造方法) String类提供了很多不同的构造器,分别对应了不同的字符串初始化方法,此处从源码中摘录如 ...

  2. JDK中String类的源码分析(二)

    1.startsWith(String prefix, int toffset)方法 包括startsWith(*),endsWith(*)方法,都是调用上述一个方法 public boolean s ...

  3. String.getBytes(),源码之下,了无秘密

    @Deprecated public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin) { if (srcBegin ...

  4. C++ int与string的相互转换(含源码实现)

    一.int转换成string Ⅰ.to_string函数 c++11标准增加了全局函数std::to_string: string to_string (int val); string to_str ...

  5. String,StringBuffer,StringBuilder源码分析

    1.类结构 String Diagrams StringBuffer Diagrams StringBuilder Diagrams 通过以上Diagrams可以看出,String,StringBuf ...

  6. JDK中String类的源码分析(一)

    1.String类是final的,不允许被继承 /** The value is used for character storage. */ private final char value[]; ...

  7. String、StringBuffer、StringBuilder源码分析

    利用反编译具体看看"+"的过程 1 public class Test 2 { 3 public static void main(String[] args) 4 { 5 int ...

  8. String 源码浅析(一)

    前言 相信作为 JAVAER,平时编码时使用最多的必然是 String 字符串,而相信应该存在不少人对于 String 的 api 很熟悉了,但没有看过其源码实现,其实我个人觉得对于 api 的使用, ...

  9. 源码学习-String类

    最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码. 1.类定义 String 被final ...

随机推荐

  1. wp8.1 sdk preview 预览版

    http://pan.baidu.com/s/1hqyusja?qq-pf-to=pcqq.c2c#dir/path=%2FWPSDK%208.1%20DevPreview%20Installerwp ...

  2. TOJ 4095: love168yk的选美大赛

    4095: love168yk的选美大赛  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: ...

  3. 微软.net一些类的源码

    地址:http://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs 关键字:refer ...

  4. scp命令(基于ssh上传文件等)

    (转:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html) svn 删除所有的 .svn文件 find . -name .svn ...

  5. hadoop2.7.0分布式系统搭建(ubuntu14.04)

    因为使用需要,在自己小本上建了四个虚拟机,打算搭建一个1+3的hadoop分布式系统. 环境:hadoop2.7.0+ubuntu14.04 (64位) 首先分别为搭建好的虚拟机的各主机重命名 方法: ...

  6. LightOJ——1012Guilty Prince(连通块并查集)

    1012 - Guilty Prince Time Limit: 2 second(s) Memory Limit: 32 MB Once there was a king named Akbar. ...

  7. 【强连通分量缩点】poj 1236 Network of Schools

    poj.org/problem?id=1236 [题意] 给定一个有向图,求: (1)至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点 (2)至少要加多少条边,才能使得从任何一个顶点出发,都 ...

  8. 【容斥】HDU 4135 Co-prime

    acm.hdu.edu.cn/showproblem.php?pid=4135 [题意] 询问[a,b]中与n互质的数有多少个 [思路] 考虑[1,m]中与n互质的数有多少个,答案就是query(b) ...

  9. 【bzoj2238】Mst(树链剖分+线段树)

    2238: Mst Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 465  Solved: 131[Submit][Status][Discuss] ...

  10. ASP.NET2.0 ObjectDataSource的使用详解《转》

    原文发布时间为:2008-08-02 -- 来源于本人的百度文章 [由搬家工具导入] ASP.NET2.0 ObjectDataSource的使用详解(2) http://mqingqing123.c ...