我有两个char指针。
char *a="ABC|XYZ|PQR";
char *b = "|XYZ|PQR";
我想将这些"ABC"
这些char指针之间的差异添加到新的char指针中。
答案 0 :(得分:0)
您可以将两个字符串都拆分为ABC
或XYZ
之类的部分,并将它们保存到容器中(例如数组char**
或二进制搜索树即std::set)然后您可以比较两个容器。
lsh容器(拆分结果)中存在但rhs容器(b拆分结果)中不存在的块(令牌)是您的区别。
您可以使用strtok函数或其他功能(例如std :: regexp等)来实现字符串拆分。
一个例子:
确保已设置C ++ 11编译器选项,即在Unix / MacOSX / MinGW的情况下为-std=c++11
,对于Microsoft Visual C ++的情况为/std:c++latest
。
#include <set>
#include <string>
#include <cstdlib>
#include <cstring>
static std::set<std::string> split(const char* src, const char separator) {
const char pattern[2] = {separator,'\0'};
char *tmp = new char[ std::strlen(src) ];
std::strcpy(tmp,src);
std::set<std::string> ret;
char* i = std::strtok(tmp,pattern);
while(nullptr != i) {
ret.emplace( std::string(i) );
i = std::strtok(nullptr,pattern);
}
delete [] tmp;
return ret;
}
int main ()
{
const char* A = "ABC|XYZ|PQR";
const char* B = "|XYZ|PQR";
std::set<std::string> a_split = split(A,'|');
std::set<std::string> b_split = split(B,'|');
std::string diff;
for(auto key: a_split) {
if( b_split.end() == b_split.find(key) ) {
// token from A not found in B split result
diff = key;
break;
}
}
const char *difference = diff.data();
std::printf( difference );
}