21xrx.com
2025-06-28 17:35:48 Saturday
文章检索 我的文章 写文章
C++计算从字符串s1删除s2出现的字符的个数
2023-07-12 21:54:17 深夜i     20     0
C++ 字符串 删除 出现 字符个数

在C++编程中,有时需要处理字符串的相关问题。其中,一个典型的问题是如何计算一个字符串中删除另一个字符串后剩余字符的个数。本文将介绍一种实现方法,希望能够对读者有所帮助。

首先,需要明确的是,C++中字符串的表示方式是一个字符数组。因此,要删除一个字符串,实质上就是在原来的字符数组中去掉指定的字符。为此,可以使用双指针法来进行遍历和修改。

具体来说,首先定义两个指针i和j,分别指向s1和s2的开头。然后按照以下步骤进行遍历和修改:

1. 用指针i遍历整个s1字符串,同时每次记录删除s2字符的个数。

2. 用指针j遍历整个s2字符串,如果发现s1[i]和s2[j]相等,则将s1中的该位置上的字符删除,并将指针i和j往后移动一位。

3. 如果s1[i]和s2[j]不相等,则只将指针i往后移动一位。

完成以上操作后,s1中即为删除s2后剩余的字符。最后返回记录的删除s2字符的个数即可。

下面给出具体的代码实现:

#include <iostream>
#include <string>
using namespace std;
int remove(string s1, string s2) {
 int i = 0, j = 0, count = 0;
 while (i < s1.length()) {
  if (s1[i] == s2[j]) {
   s1.erase(i, 1);
   j++; //需要同时移动指针j
   count++;
  } else {
   i++;
  }
  if (j == s2.length())
   j = 0;
  
 }
 return count;
}
int main() {
 string s1, s2;
 cout << "请输入字符串s1:";
 getline(cin, s1);
 cout << "请输入字符串s2:";
 getline(cin, s2);
 int count = remove(s1, s2);
 cout << "删除s2出现的字符的个数为:" << count << endl;
 cout << "删除后的字符串为:" << s1 << endl;
 return 0;
}

在上述代码中,使用了C++中的string类,其中erase()函数用于删除指定位置的字符。运行代码,即可输入s1、s2两个字符串,程序将返回删除s2出现的字符的个数以及删除后的字符串s1。

综上所述,本文介绍了一种使用双指针法实现从字符串s1删除s2出现的字符的个数的方法。在实际编程中,可以根据具体场景进行修改和优化,达到更好的效果。

  
  

评论区