实现一个函数 StrSep(s, sub, part1, part2) 来接收字符串和子字符串 (sub) 并返回 :

Implement a function StrSep(s, sub, part1, part2) to receive a string (s) and a substring (sub) and return :

本文关键字:字符串 sub 返回 StrSep 函数 实现 part2 part1 一个      更新时间:2023-10-16

part1:(s)之前但不包括(子)part2的部分:(s)后面但不包括(子)
的部分

例如,如果 s = "3rdofJuly ",sub = "of",则 part1 = "3rd" 和 part2 = "July

如果 (sub) 在 (s) 中不存在,则 part1、part2 将作为 Null 字符串返回。

这是我为我的代码想出的,我设法完成了第 1 部分,但我无法获得第 2 部分:

#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
void StrStep (string,string);
int main(int argc, const char * argv[])
{
string S;
string Sub = "of";
cout << "enter a string : " <<endl;
cin >> S;
StrStep(S,Sub);
return 0;
}

void StrStep (string &s, string &sub)
{
string part1;
string part2;
if (s.find(sub) != string::npos )
part1 = s.erase(s.find(sub),string::npos);
if (s.find(sub) != string::npos)
part2 = s.erase(
} 

std::string::find方法返回搜索字符串的起始位置。

要到达搜索字符串的末尾,您需要将子字符串的长度添加到位置:

std::string::size_type position = s.find(sub) + sub.length();

您需要检查position是否仍在字符串中。 有一个用例,其中 part2可能是空的。