#include <iostream>
#include <cstring>
#include <stdexcept> // 用于异常处理
using namespace std;

class mid {
public:
    mid(char* src, char* s1, char* s2, char* sub) : m_src(src), m_s1(s1), m_s2(s2), m_sub(sub) {}

    void find_mid(mid& x) {
        char* sub1 = strstr(x.m_src, x.m_s1);
        if (sub1 == NULL) {
            throw runtime_error("Marker string s1 not found.");
        }
        sub1 += strlen(x.m_s1);
        char* sub2 = strstr(sub1, x.m_s2);
        if (sub2 == NULL) {
            throw runtime_error("Marker string s2 not found.");
        }
        size_t n = sub2 - sub1;
        if (n >= 20) { // 假设m_sub的大小为20,进行边界检查
            throw runtime_error("Substring too large for buffer.");
        }
        strncpy_s(x.m_sub, 20, sub1, n);
        x.m_sub[n] = 0;
    }

    void setSrc(char* src) { m_src = src; }
    void setS1(char* s1) { m_s1 = s1; }
    void setS2(char* s2) { m_s2 = s2; }
    void setSub(char* sub) { m_sub = sub; }
    void show() { cout << m_sub << endl; }

private:
    char* m_src;
    char* m_s1;
    char* m_s2;
    char* m_sub;
};

int main() {
    char src[] = "first, second, third, fourth, fifth";
    char s1[] = "second";
    char s2[] = "fourth";
    char sub[20];
    mid* p = new mid(src, s1, s2, sub);
    try {
        p->find_mid(*p);
        p->show();
    } catch (const exception& e) {
        cerr << "Error: " << e.what() << endl;
    }
    delete p; // 释放内存
    return 0;
}
 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐