将两个char指针的差值转换为新的char指针

时间:2018-11-16 10:12:53

标签: c++

我有两个char指针。

char *a="ABC|XYZ|PQR";
char *b = "|XYZ|PQR";

我想将这些"ABC"这些char指针之间的差异添加到新的char指针中。

1 个答案:

答案 0 :(得分:0)

您可以将两个字符串都拆分为ABCXYZ之类的部分,并将它们保存到容器中(例如数组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 );
}