21xrx.com
2024-12-22 21:04:37 Sunday
登录
文章检索 我的文章 写文章
C++一本通:字符串移位包含问题
2023-07-11 05:37:32 深夜i     --     --
C++一本通 字符串 移位 包含问题 算法

字符串移位包含问题是指在两个字符串s1和s2中,如果s2可以通过将其任意个字符移位后得到字符串s1,则称字符串s2包含字符串s1。这种问题在实际开发中会经常遇到,解决该问题的方法有很多种。在本文中,我们将介绍使用C++解决字符串移位包含问题的方法。

首先,我们需要明确字符串移位包含问题的本质是查找s2中是否存在一个连续的子串,使得该子串经过移位后可以得到s1。具体来说,我们可以将字符串s2复制一份并拼接在原字符串后面得到字符串s2s2,如果s2s2中包含s1,则s2包含s1。

为了在C++中实现该算法,我们可以定义一个函数check,函数参数包括待查找的两个字符串s1和s2。具体操作步骤如下:

1. 先将s2复制一份并拼接在原字符串s2后面,得到字符串s2s2。

2. 判断s2s2中是否包含s1,可以使用字符串的find函数实现。

3. 如果包含则返回true,否则返回false。

下面是C++代码实现:


bool check(string s1, string s2) {

  string s2s2 = s2 + s2;

  if (s2s2.find(s1) != string::npos)

    return true;

  

  return false;

}

在使用该函数前,我们需要将头文件string包含进来。

最后,我们可以编写一个简单的测试程序来验证该函数的正确性:


#include <iostream>

#include <string>

using namespace std;

bool check(string s1, string s2) {

  string s2s2 = s2 + s2;

  if (s2s2.find(s1) != string::npos)

    return true;

  

  return false;

}

int main() {

  string s1 = "cdab";

  string s2 = "abcd";

  if (check(s1, s2))

    cout << "true" << endl;

  

  else

    cout << "false" << endl;

  

  return 0;

}

该程序的输出结果为true,说明函数实现是正确的。在实际开发中,我们可以把该函数封装成一个字符串工具类,方便复用。

  
  

评论区

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