一:实现之前先说一所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. Java-使用哈希码比较对象的值

    在一些特殊的情况下使用 package com.tj; import java.io.File; public class MyHash { public static void main(Strin ...

  2. UIDatePicker 显示时间和打印时间不一样

    默认是时区为0,如下格式化一下就好啦 UIDatePicker *datePiker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 100, ...

  3. 面试准备——rpc面试题

    https://www.jianshu.com/p/28e48e5f9c73 1 什么是 RPC ? RPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方 ...

  4. 【LeetCode】Game of Life(生命游戏)

    这道题是LeetCode里的第289道题. 题目描述: 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格 ...

  5. IIS中如何应用程序启用https协议

    首先已经安装完了SSL证书 1.找到需要添加的站点,右击 ---> 编辑绑定-->添加--->选择  ""https"-->选择"SSL ...

  6. HDU——1242Rescue(BFS+优先队列求点图最短路)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. 洛谷P3327 - [SDOI2015]约数个数和

    Portal Description 共\(T(T\leq5\times10^4)\)组数据.给出\(n,m(n,m\leq5\times10^4)\),求\[\sum_{i=1}^n\sum_{j= ...

  8. leetcode 206 头插法

    头插法,定义temp,Node temp指向每次头结点,Node每次指向要进行头插的节点. 最后返回temp /** * Definition for singly-linked list. * st ...

  9. js等待提示通用类

    function WaitingTip (options){       if(!options){                options = {                contain ...

  10. R读数据stringsAsFactors=F,存数据时row.names = F

    stringsAsFactors=F   以前在r里读数据,经常把character读成factor,还得费半天劲把它转回来,尤其是把factor转成numeric还没有那么直接.例如: dat< ...