精华内容
下载资源
问答
  • C/C++实现字符串查找子串

    千次阅读 2019-10-25 16:13:54
    C/C++实现字符串查找子串

    C/C++实现字符串查找子串
    查找字符串str中是否含有子串sub,代码如下:
    int mysubstr(string str, string sub)
    {
    int pos, i, j, tmp;
    if(str == “” || sub == “” || str.length() < sub.length()) return -1;
    for(i = 0; i < str.length(); i++)
    {
    if(str[i] == sub[0])
    {
    for(pos = i, j = 0; j < sub.length() && pos < str.length(); pos++, j++)
    {
    if(str[pos] != sub[j]) break;
    }
    }
    if(j == sub.length()) return pos-sub.length();
    }
    return -1;
    }

    int main()
    {
    string str = “abcdefcdfgh”;
    string sub = “cdf”;
    int pos = mysubstr(str, sub);
    printf(“pos:%d\n”, pos);
    return 0;
    }

    注:先查找到子串第一个字符所在位置,之后查找子串全部,若不符合则继续从原字符串中查找下一个子串第一个字符位置

    展开全文
  • 在 C 语言和 C++ 语言中,可用于实现字符串查找功能的函数非常多。在 STL 中,字符串的查找功能可以实现多种功能,比如说:搜索单个字符、搜索子串;实现前向搜索、后向搜索;分别实现搜索第一个和最后一个满足条件...

    在 C 语言和 C++ 语言中,可用于实现字符串查找功能的函数非常多。在 STL 中,字符串的查找功能可以实现多种功能,比如说:

    搜索单个字符、搜索子串;

    实现前向搜索、后向搜索;

    分别实现搜索第一个和最后一个满足条件的字符(或子串);

    若查找 find() 函数和其他函数没有搜索到期望的字符(或子串),则返回 npos;若搜索成功,则返回搜索到的第 1 个字符或子串的位置。其中,npos 是一个无符号整数值,初始值为 -1。当搜索失败时, npos 表示“没有找到(not found)”或“所有剩佘字符”。

    值得注意的是,所有查找 find() 函数的返回值均是 size_type 类型,即无符号整数类型。该返回值用于表明字符串中元素的个数或者字符在字符串中的位置。

    下面分别介绍和字符查找相关的函数。

    find()函数和 rfind()

    find() 函数的原型主要有以下 4 种:

    size_type find (value_type _Chr, size_type _Off = 0) const;

    //find()函数的第1个参数是被搜索的字符、第2个参数是在源串中开始搜索的下标位置

    size_type find (const value_type* _Ptr , size_type _Off = 0) const;

    //find()函数的第1个参数是被搜索的字符串,第2个参数是在源串中开始搜索的下标位置

    size_type find (const value_type* _Ptr, size_type _Off = 0, size_type _Count) const;

    //第1个参数是被搜索的字符串,第2个参数是源串中开始搜索的下标,第3个参数是关于第1个参数的字符个数,可能是 _Ptr 的所有字符数,也可能是 _Ptr 的子串宇符个数

    size_type find (const basic_string& _Str, size_type _Off = 0) const;

    //第1个参数是被搜索的字符串,第2参数是在源串中开始搜索的下标位置

    rfind() 函数的原型和find()函数的原型类似,参数情况也类似。只不过 rfind() 函数适用于实现逆向查找。

    find() 函数和 rfind() 函数的使用方法参见如下程序:

    #include

    #include

    using namespace std;

    int main ()

    {

    string str_ch (" for");

    string str (" Hi, Peter, I'm sick. Please bought some drugs for me.");

    string::size_type m= str.find ('P', 5);

    string::size_type rm= str.rfind('P', 5);

    cout << "Example - find() : The position (forward) of 'P' is: " << (int) m << endl;

    cout << "Example - rfind(): The position (reverse) of 'P' is: " << (int) rm << endl;

    string::size_type n = str.find (" some", 0);

    string::size_type rn = str.rfind (" some", 0);

    cout << "Example - find () : The position (forward) of 'some' is: " << (int) n << endl;

    cout << "Example - rfind () : The position (reverse) of 'some' is: " << (int) rn << endl;

    string::size_type mo = str.find (" drugs", 0, 5);

    string::size_type rmo = str.rfind (" drugs", 0, 5);

    cout << "Example - find(): The position (forward) of 'drugs' is: " << (int) mo << endl;

    cout << "Example - rfind(): The position (reverse) of 'drugs' is: " << (int) rmo << endl;

    string::size_type no = str.find (str_ch, 0);

    string::size_type rno = str.rfind(str_ch, 0);

    cout << "Example - find (): The position of 'for' is: " << (int) no << endl;

    cout << "Example - rfind(): The position of 'for' is: " << (int) rno << endl;

    cin.get ();

    }

    程序的运行结果为:

    Example - find() : The position (forward) of 'P' is: 5

    Example - rfind(): The position (reverse) of 'P' is: 5

    Example - find () : The position (forward) of 'some' is: 35

    Example - rfind () : The position (reverse) of 'some' is: -1

    Example - find(): The position (forward) of 'drugs' is: 40

    Example - rfind(): The position (reverse) of 'drugs' is: -1

    Example - find (): The position of 'for' is: 46

    Example - rfind(): The position of 'for' is: -1

    find_first_of()函数和 find_last_of()函数

    find_first_of() 函数可实现在源串中搜索某字符串的功能,该函数的返回值是被搜索字符串的第 1 个字符第 1 次出现的下标(位置)。若查找失败,则返回 npos。

    find_last_of() 函数同样可实现在源串中搜索某字符串的功能。与 find_first_of() 函数所不同的是,该函数的返回值是被搜索字符串的最后 1 个字符的下标(位置)。若查找失败,则返回 npos。

    上述两个函数的原型分别为:

    size_type find_first_not_of (value_type_Ch, size_type_Off = 0) const; size_type find_first_of (const value_type* _Ptr, size_type _Off = 0) const;

    size_type find_first_of (const value_type* _Ptr, size_type_Off, size_type_Count) const;

    size_type find_first_of (const basic_string & _Str, size_type_Off = 0) const;

    size_type find_last_of (value_type _Ch, size_type_Off = npos) const;

    size_type find_last_of (const value_type* _Ptr, size_type_Off = npos) const;

    size_type find_last_of (const value_type* _Ptr, size_type _Off, size_type _Count) const;

    size_type find_last_of (const basic_string& _Str, size_type_Off = npos) const;

    下面的程序示例详细阐述了 find_first_of() 函数和 find_last_of() 函数的使用方法。这两个函数和 find() 函数及 rfind() 函数的使用方法相同,具体参数的意义亦相同。

    #include

    #include

    using namespace std;

    int main ()

    {

    string str_ch ("for");

    string str("Hi, Peter, I'm sick. Please bought some drugs for me. ");

    int length = str.length();

    string::size_type m = str.find_first_of ('P', 0);

    string::size_type rm = str.find_last_of ('P', (length - 1));

    cout << "Example - find_first_of (): The position (forward) of 'P' is: " << (int) m << endl;

    cout << "Example - find_last_of (): The position (reverse) of 'P' is: " << (int) rm << endl;

    string:: size_type n = str.find_first_of ("some", 0);

    string:: size_type rn = str.find_last_of ("some", (length -1));

    cout << "Example - find_first_of(): The position (forward) of 'some' is: " << (int) n << endl;

    cout << "Example - find_last_of(): The position (reverse) of 'some' is: " << (int) rn << endl;

    string:: size_type mo = str.find_first_of ("drugs", 0, 5);

    string:: size_type rmo = str.find_last_of ("drugs", (length-1), 5);

    cout << "Example - find_first_of () : The position (forward) of 'drugs' is: " << (int) mo << endl;

    cout << "Example - find_last_of () : The position (reverse) of 'drugs' is: " << (int) rmo << endl;

    string::size_type no = str.find_first_of (str_ch, 0);

    string::size_type rno = str.find_last_of (str_ch, (length -1));

    cout << "Example - find_first_of() : The position of 'for' is: " << (int) no << endl;

    cout << "Example - find_last_of () : The position of 'for' is: " << (int) rno << endl;

    cin.get();

    return 0;

    }

    程序执行结果:

    Example - find_first_of (): The position (forward) of 'P' is: 4

    Example - find_last_of (): The position (reverse) of 'P' is: 21

    Example - find_first_of(): The position (forward) of 'some' is: 5

    Example - find_last_of(): The position (reverse) of 'some' is: 51

    Example - find_first_of () : The position (forward) of 'drugs' is: 8

    Example - find_last_of () : The position (reverse) of 'drugs' is: 48

    Example - find_first_of() : The position of 'for' is: 8

    Example - find_last_of () : The position of 'for' is: 48

    find_first_not_of()函数和 find_last_not_of()函数

    find_first_not_of() 函数的函数原型为:

    size_type find_first_not_of (value_type _Ch, size_type_Off = 0) const;

    size_type find_first_not_of (const value_type * _Ptr, size_type_Off = 0) const;

    size_type find_first_not_of (const value_type* _Ptr, size_type_Off, size_type_Count) const;

    size_type find_first_not_of (const basic_string & _Str, size_type_Off = 0) const;

    find_first_not_of() 函数可实现在源字符串中搜索与指定字符(串)不相等的第 1 个字符;find_last_not_of() 函数可实现在源字符串中搜索与指定字符(串)不相等的最后 1 个字符。这两个函数的参数意义和前面几个函数相同,它们的使用方法和前面几个函数也基本相同。详见下面的程序:

    #include < iostream >

    #include

    using namespace std;

    int main ()

    {

    string str_ch (" for");

    string str ("Hi, Peter, I'm sick. Please bought some drugs for me.");

    int length = str.length ();

    string::size_type m= str.find_first_not_of ('P',0);

    string::size_type rm= str.find_last_not_of ('P', (length -1);

    cout << "Example - find_first_of (): The position (forward) of 'P' is: " << (int) m << endl;

    cout << "Example - find_last_of (): The position (reverse) of 'P' is: " << (int) rm << endl;

    string:: size_type n = str.find_first_not_of ("some", 0);

    string:: size_type rn = str.find_last_not_of ("some", (length -1));

    cout << "Example - find_first_of (): The position (forward) of 'some' is: " << (int) n << endl;

    cout << "Example - find_last_of (): The position (reverse) of 'some' is: " << (int) rn << endl;

    string:: size_type mo = str.find_first_not_of ("drugs", 0, 5);

    string:: size_type rmo = str.find_last_not_of ("drugs", (length-1), 5);

    cout << "Example - find_first_of (): The position (forward) of 'drugs' is: " << (int) mo << endl;

    cout << "Example - find_last_of (): The position (reverse) of 'drugs' is: " << (int) rno << endl;

    string::size_type no = str.find_first_not_of (str_ch, 0);

    string::size_type rno = str.find_last_not_of (str_ch, (length-1));

    cout << "Example - find_first_of (): The position of 'for' is: " << (int) no << endl;

    cout << "Example - find_last_of () : The position of 'for' is: " << (int) rno << endl;

    cin.get ();

    return 0;

    }

    程序运行结果为:

    Example - find_first_of (): The position (forward) of 'P' is: 0

    Example - find_last_of (): The position (reverse) of 'P' is: 52

    Example - find_first_of (): The position (forward) of 'some' is: 0

    Example - find_last_of (): The position (reverse) of 'some' is: 52

    Example - find_first_of (): The position (forward) of 'drugs' is: 0

    Example - find_last_of (): The position (reverse) of 'drugs' is: 52

    Example - find_first_of (): The position of 'for' is: 0

    Example - find_last_of () : The position of 'for' is: 52

    本小节主要讲述 C++ STL 中的字符串查找函数。对于所述的 6 个查找函数,它们的使用形式大致相同,对于每个函数均配备了实例作为参考。请读者能认真对照例题,深刻理解这 6 个函数的使用方法,仔细体会函数每个参数的意义。

    展开全文
  • 字符串倒序 #include <iostream> #include<cstdlib> #include<string> using namespace std; int main() { string s="abcde",temp; temp=s;//注意要设置一个字符串变量承接倒序后的字符串,而且...

    字符串倒序

    #include <iostream>
    #include<cstdlib>
    #include<string>
    using namespace std;
    int main()
    {
        string s="abcde",temp;
        temp=s;//注意要设置一个字符串变量承接倒序后的字符串,而且要对字符串进行初始化,把S赋值给temp
        for(int i = 0; i<s.size();++i)
        {
            temp[i]=s[s.size()-i-1];
        }
        cout<<temp<<endl;
        return 0;
    }
    
    

    查找子串

    #include <iostream>
    #include<cstdlib>
    #include<string>
    using namespace std;
    int main()
    {
        string s="abcdabcdabcdabcd",temp;
        int n=0;//字符串的首位置是0
        int sum=0;//当不知道有多少个子串的时候用while
        while(s.find("cd",n)!=string::npos)//string::npos判断是否查找到这个字串,如果没有查找到就返回这个值
        {//字符串的长度与位置变量,类型都是"string::size_type"实际上是一个无符号的长整数,在平时练习时,由于字符串都比较短,所以可以使用int
        //或long类型的变量来表示
            n=s.find("cd",n);
            cout<<n<<endl;
            ++n;
            ++sum;
        }
        cout<<sum<<endl;
        return 0;
    }
    
    

    连接两个字符串

    #include <iostream>
    #include<cstdlib>
    #include<string>
    using namespace std;
    int main()
    {
        string s1="abc",s2="def";
        string temp=s1+s2;
        cout<<temp;
        return 0;
    }
    
    

    取子串

    #include <iostream>
    #include<cstdlib>
    #include<string>
    using namespace std;
    int main()
    {
        string s1="abc我爱祖国edf";
        string s2="我爱祖国";
        int n;
        n=s1.find(s2,0);
        string s3=s1.substr(n,s2.size());
        cout<<s3<<endl;
        return 0;
    }
    
    

    替换子串

    #include <iostream>
    #include<cstdlib>
    #include<string>
    using namespace std;
    int main()
    {
        string s1="abcedf";
        string s2="ce";
        int n=s1.find(s2,0);
        s1.replace(n,s2.size(),"a");
        cout<<s1<<endl;
        return 0;
    }
    
    

    删除子串

    #include <iostream>
    #include<cstdlib>
    #include<string>
    using namespace std;
    int main()
    {
        string s1="abcedf";
        string s2="ce";
        int n=s1.find(s2,0);
        s1.erase(n,s2.size());
        cout<<s1<<endl;
        return 0;
    }
    
    
    展开全文
  • C++字符串常用操作-查找子串

    千次阅读 2019-02-23 20:40:16
    1.查找子串 string::npos是一个比字符串长度还要大的整数,所以查找的子串的位置一定不会等于它 #include #include &lt;string.h&gt; using namespace std; int main() { string s=“abcdef”; string s1...

    111在这里插入图片描述
    1.查找子串
    string::npos是一个比字符串长度还要大的整数,所以查找的子串的位置一定不会等于它
    #include
    #include <string.h>
    using namespace std;
    int main()
    {
    string s=“abcdef”;
    string s1=“cd”;//注意第一个位置是0
    long n;
    if(s.find(s1,0)!=string::npos)
    {
    n=s.find(s1,0);
    cout<<n<<endl;
    }
    return 0;
    }

    展开全文
  • 在给定的字符串查找最长子串 题目链接:题目链接 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 如: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3...
  • #include<iostream> using namespace std; int main() { char *strstr(char *src,char *sub); char p[256]; char q[256]; cout<<"input the src:"<<endl; cin>..."inp...
  • 在写C++程序中,总会遇到要从一个字符串查找一小段子字符串的情况,对于在C中,我们经常用到strstr()或者strchr()这两种方法。而对于C++的string,我们往往会用到find()。C++:#inlcudeC: #includefind():在一个...
  • C++字符串查找函数

    2019-10-23 17:05:54
    在 C 语言和C++语言中,可用于实现字符串查找功能的函数非常多。在STL中,字符串的查找功能可以实现多种功能,比如说: 搜索单个字符、搜索子串; 实现前向搜索、后向搜索; 分别实现搜索第一个和最后一个满足...
  • 比如:字符串 “cu_f”,现在只要”cu”,也就是去掉”_f” std::string str1=”cu_f”; int pos=0; pos=str1.find(“_f”); ///获取”_f”出现的位置 if(-1 == pos) ///pos=-1说明没有找到 “_f” { return; ...
  • C++ 字符串查找,替换和子串

    千次阅读 2018-01-10 20:57:12
    int main() { ... // 查找 int index = s.find("+"); // 替换, (起始位置, 子串长度, 替换后的值,这里替换为空,相当于删除) string ss = s.replace(index, 1, ""); // 子串 string sub = s.substr(0,
  • 函数const 查找子串返回一个指向str1中第一个出现str2的指针,如果str2不是str1的一部分,则返回一个空指针。 匹配过程不包括终止的空字符,但它在这里停止。参数str1:需要扫描的字符串。 str2:包含要匹配的字符...
  • string 类有一些查找子串和字符的成员函数,它们的返回值都是子串或字符在 string 对象字符串中的位置(即下标)。如果查不到,则返回 string::npos。string: :npos 是在 string 类中定义的一个静态常量。这些函数...
  • 时间:2020-03-13概述:回文字符串 查找字符串C++找到字符串中最长的回文子串,并返回其长度,算法思想:本算法的一次判断每个字符的前后回文的长度,选取最大的那个输出;其中,start记录最长字符串的初始位置:...
  • 1、string::find()函数:是一个字符或字符串查找函数,返回类型string::size_type。如果查找成功,返回按照查找规则找到的第一个字符或者子串的位置;如果查找失败,返回string::npos。 2、string::npos:是对类型为...
  • 1. 截取子串 s.substr(pos, n) //截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos) //截取s中从从pos...3. 查找子串 s.find(s1) //查找s中第一次出现s1的位置,并返回(包括0) s.rfind(s1) ...
  • 有一个字符串,里面有各种内容,想要在其中查找固定内容的子串,并将子串提取出来 代码 #include <iostream> #include <string> std::string extract_value(std::string key, std::string buffer) { ...
  • #include<iostream> #include<string> using namespace std; int main() { string a = "apple banana orange"; string b = "banana"; string::size_type idx = a.find(b);...= string::np...
  • 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的...
  • 字符串查找与提取 strstr()find()查找提取  strstr()与find()均可用于字符串的查找,一个返回的是内存的位置,一个却是目标字符在字符串中的下标。 strstr() 函数原型: extern char *strstr(char *...
  • 在 C 语言和 C++ 语言中,可用于实现字符串查找功能的函数非常多。在 STL 中,字符串的查找功能可以实现多种功能,比如说: 搜索单个字符、搜索子串; 实现前向搜索、后向搜索; 分别实现搜索第一个和最后一个满足...
  • C++的string类提供了字符串查找另一个字符串的函数find。 其重载形式为:string::size_typestring::find(string &); 功能为在string对象中,查找参数string类型的字符串是否存在,如果存在,返回起始位置。...
  • C++ 字符串截取、替换、查找函数

    千次阅读 2018-09-22 09:47:21
    1. 截取子串 s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回 ...3. 查找子串 s.find(s1) 查找s中...
  • 给定一个字符串,请找出其中不含有重复字符的 最长子串 的长度。 示例1 输入: “abcabcbb” 输出: 3 示例2 输入: “bbbbb” 输出: 1 示例3 输入: “pwwkew” 输出: 3 思路 由于题目要求我们查找不含有重复...
  • 题目:找字符串中最长的不重复子串 string str = &amp;quot;890123457063788263178548596239785&amp;quot;; 方法1:使用string和vector //保存不重复的临时子串 string tmp; //保存所有不重复的...
  • 在STL中,字符串查找可以实现多种功能,例如: 搜索单个字符、搜索子串; 实现前向搜索、后向搜索; 分别实现搜索第一个和最后一个满足条件的字符(或子串); 要明确的一点是,所有查找find()函数的返回值均是...
  • 1. 截取子串 s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有...3. 查找子串 s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0)...
  • C++字符串

    2020-03-07 10:13:55
    字符串我们在C语言中其实已经学习过了,在C语言中学习字符串我们用的是另一个概念,字符数组,也就是在C语言中没有真正意义上的字符串,用字符数组模拟字符串,C++语言直接支持C语言的所有概念,C++语言中没有原生的字符串...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 302
精华内容 120
关键字:

c++字符串查找子串

c++ 订阅