21xrx.com
2024-12-22 22:29:43 Sunday
登录
文章检索 我的文章 写文章
C++字符串相减操作
2023-07-02 17:25:39 深夜i     --     --
C++字符串 相减操作 字符串操作 算法 编程技巧

C++字符串相减操作是指将两个字符串进行操作,得到两个字符串中不同的字符集合。在C++中,可以使用STL库中的set容器来实现字符串相减操作。set是一个内部自动排序且不允许重复元素的容器,因此对两个字符串分别以字符为元素,放入两个set中,最终将两个set中不同的字符存入一个新的set中,即可实现字符串相减操作。

下面是字符串相减的示例代码:


#include <iostream>

#include <set>

using namespace std;

int main() {

  string a = "abcdefg";

  string b = "abzdfgh";

  set<char> s_a(a.begin(), a.end());

  set<char> s_b(b.begin(), b.end());

  set<char> s_diff;

  set_difference(s_a.begin(), s_a.end(), s_b.begin(), s_b.end(), inserter(s_diff, s_diff.begin()));

  for (auto& i : s_diff)

    cout << i << " ";

  

  return 0;

}

上述代码中,定义了两个字符串 a 和 b,分别将它们转化成 set 容器 s_a 和 s_b,并将它们的差集存放在另一个 set 容器 s_diff 中。set_difference 函数可以对两个集合中的元素求差集,使用 inserter 将差集插入到新的 set 容器中。最后遍历 s_diff 容器中的元素,即可输出两个字符串中不同的字符集合。在本例中,输出结果为 C e g 。

需要注意的是,由于 set 容器是自动排序的,因此输出的字符集合也是有序的。若要保留原有顺序,可以使用 vector 容器。最终的代码如下:


#include <iostream>

#include <set>

#include <vector>

#include <algorithm>

using namespace std;

int main() {

  string a = "abcdefg";

  string b = "abzdfgh";

  set<char> s_a(a.begin(), a.end());

  set<char> s_b(b.begin(), b.end());

  set<char> s_diff;

  vector<char> v_diff;

  set_difference(s_a.begin(), s_a.end(), s_b.begin(), s_b.end(), inserter(s_diff, s_diff.begin()));

  set_difference(s_b.begin(), s_b.end(), s_a.begin(), s_a.end(), inserter(s_diff, s_diff.begin()));

  v_diff.reserve(s_diff.size());

  copy(s_diff.begin(), s_diff.end(), back_inserter(v_diff));

  sort(v_diff.begin(), v_diff.end(), less<char>());

  for (auto& i : v_diff)

    cout << i << " ";

  

  return 0;

}

上述代码中,使用 set_difference 函数将两个 set 容器中不同的字符集合插入到 s_diff 容器中,最后将 s_diff 容器中的元素取出,存到 v_diff 容器中,并使用 sort 函数进行排序。输出 v_diff 容器的元素,就可以得到两个字符串相减的结果。在本例中,输出结果为 C e g z 。

  
  

评论区

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