c++ - C++ 合并重叠字符串
问题描述
假设我有字符串 A:“info_mesh”,我想将它添加到字符串 B:“mesh_foo”。
但是,我想要字符串“info_mesh_foo”,而不是字符串“info_meshmesh_foo”。
我不能只说:
std::string A = "randomstuffoverlap", B = "overlapwithmorestuff"
std::string C = A + B;
因为我最终会得到:
C = "randomstuffoverlapoverlapwithmorestuff",
当我想要时:
C = "randomstuffoverlapwithmorestuff"
没有提到两次的“重叠”,就好像创建的字符串有两个字符串的“网格”。
但是,如果:
std::string A = "juststuff", B = "unrelatedstuff", C;
//std::string C should be made equal to "juststuffunrelatedstuff".
(所以它们之间没有共享子字符串)
我该怎么做呢?提前致谢。
解决方案
这花了我一段时间,但我有这个功能:
string overlapjoin(string a, string b) {
for (long long x = (b.length()<= a.length())? b.length(): a.length(); x > 0; --x)
if (a.substr(a.length() - x, a.length() - 1) == b.substr(0, x))
return(a.substr(0, a.length() - x) + b);
return(a + b);
}
如果您想限制共享字符,也可以表示为:
string overlapjoin(string a, string b, int maxlength) {
for (long long x = maxlength; x > 0; --x)
if (a.substr(a.length() - x, a.length() - 1) == b.substr(0, x))
return(a.substr(0, a.length() - x) + b);
return(a + b);
}
推荐阅读
- c++ - 节点上的链表操作(弗洛伊德循环检测)
- python - 使用 BeautifulSoup 抓取网站时出错
- database - 如何在 Cassandra 中将日期类型的值转换为文本?
- c# - 单击空白区域不会触发 ListBox 中的事件
- python - 说明散点图中特定数据点的坐标
- python - Python-MySQL 查询不显示结果,包括同一查询中的先前导入
- python-3.x - 从 Steam 社区市场上的 Item 获取检查链接
- android - 有没有办法在颤动的文本字段中更改文本时仅更改文本?
- python - scrapy+selenium 完成后如何抓取不同的页面列表?
- java - 如何在签名和证书部分删除 XML 数字签名中奇怪的行尾?