C++字符串提取类实战解析
#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;
}
更多推荐



所有评论(0)