21xrx.com
2024-12-22 22:58:39 Sunday
登录
文章检索 我的文章 写文章
如何判断C++中的两个字符串是否存在子串关系?
2023-06-25 22:27:06 深夜i     --     --
C++ 字符串 子串 判断

C++中字符串的操作是很常见的操作,而其中最常见的就是判定两个字符串之间是否存在子串关系。在C++中,可以使用std::string类提供的函数来进行字符串操作,其中包括判断两个字符串是否存在子串关系的函数。下面将介绍几种常见的方法。

方法一:使用string::find()函数

string::find()函数可以查找一个子串是否在另一个字符串中出现,如果出现,则返回子串在字符串中首次出现的位置;如果未出现,则返回std::string::npos。因此,使用string::find()函数可以轻松实现判断C++中两个字符串是否存在子串关系的操作。

样例代码:


#include <iostream>

#include <string>

using namespace std;

int main()

{

  string str1 = "hello world";

  string str2 = "world";

  if (str1.find(str2) != string::npos)

    cout << "str2 is a substring of str1" << endl;

  

  else

    cout << "str2 is not a substring of str1" << endl;

  

  return 0;

}

方法二:使用string::compare()函数

string::compare()函数用于比较两个字符串大小,当第一个字符串小于第二个字符串时,会返回一个负数,当两个字符串相等时,会返回0,当第一个字符串大于第二个字符串时,会返回一个正数。

因此,可以利用string::compare()函数来判断两个字符串之间是否存在子串关系。若第二个字符串是第一个字符串的子串,则第一个字符串必须比第二个字符串长,并且第一个字符串的前缀必须和第二个字符串相同。如果这两个条件都满足,则可以认为第二个字符串是第一个字符串的子串。

样例代码:


#include <iostream>

#include <string>

using namespace std;

int main()

{

  string str1 = "hello world";

  string str2 = "world";

  if (str1.compare(0, str2.size(), str2) == 0)

    cout << "str2 is a substring of str1" << endl;

  

  else

    cout << "str2 is not a substring of str1" << endl;

  

  return 0;

}

方法三:使用string::substr()函数

string::substr()函数返回一个新的字符串,该字符串是从当前字符串的指定位置开始的指定长度的子串。因此,可以使用string::substr()函数来实现判断两个字符串是否存在子串关系的操作。

样例代码:


#include <iostream>

#include <string>

using namespace std;

int main()

{

  string str1 = "hello world";

  string str2 = "world";

  if (str1.find(str2) != string::npos)

    cout << "str2 is a substring of str1" << endl;

  

  else

    cout << "str2 is not a substring of str1" << endl;

  

  return 0;

}

总结:

以上便是C++中判断两个字符串是否存在子串关系的常见方法,相信大家可以灵活地运用这些方法完成相关的字符串操作。需要注意的是,在进行字符串操作时,一定要注意边界的处理,以免出现不必要的错误。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复