删除最后一个子字符串

Delete the last substring

本文关键字:字符串 最后一个 删除      更新时间:2023-10-16

我有一个任务。有 2 个字符串:S 和 S。我需要删除 S 的最后一个子字符串,这与 s 相同。为

S = [123 234 789 123]
         s = [123]
    result = [123 234 789]
#include <iostream>
#include <string>
int main() {
  std::string S = "123xyzxyz1234";
  std::string s = "123";
  // The last instance of s starts from index p of S
  auto p = S.rfind(s);
  auto tail = S.substr(p + s.length());
  if (p != std::string::npos) {
    S.resize(p);
    S += tail;
  }
  std::cout << "S = " << S << std::endl;
}

if声明防范not found案件。

由于显示的代码独立于任何实现细节,因此我将简要概述如何执行此操作。

string S,s; // I am assuming they contain the right data
int position = S.rfind(s);
string ans1 = S.substr(0, position);
string ans2 = S.substr(position + s.length());
return ans1 + ans2;

上面的代码中可能存在一个错误,可能需要进行一些安全检查。但我把它留给你。

如果第二个子字符串中的字符在子字符串的最后一部分之前没有再次重复,这将起作用:

   std::string S ="123234789123";
    std::string s="123";
    auto it= S.find_last_of(s[0]);
    std::cout<<S.substr(0,it);
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
string removeLastSubstr(string S, string s)
{
    reverse(S.begin(), S.end());
    reverse(s.begin(), s.end());
    if (s.find(s) != string::npos)
        S = S.substr(S.find(s) + s.size(), S.size());
    reverse(S.begin(), S.end());
    return S;
}