C++ 从多个字符中提取重复的子字符**

C++ 从多个字符中提取重复的子字符**,c++,char,concat,C++,Char,Concat,我有一个struct,它的构造函数接受char*(与std::string相反)。我想用类似的参数构造这个类的多个实例: struct X { char* x; }; // usage X xx = {"x.com/x"}; X xy = {"x.com/y"}; X xz = {"x.com/z"}; 参数有点复杂,常见的子字符串“string”比“x.com/”长,因此提取它将有助于提高可读性,但我不确定如何: const static char* domain = "x.co

我有一个
struct
,它的构造函数接受
char*
(与
std::string
相反)。我想用类似的参数构造这个类的多个实例:

struct X {
  char* x;
};

// usage

X xx = {"x.com/x"};

X xy = {"x.com/y"};

X xz = {"x.com/z"};
参数有点复杂,常见的子字符串“string”比“x.com/”长,因此提取它将有助于提高可读性,但我不确定如何:

const static char* domain = "x.com/";

X xx = {domain + "x"};

X xy = {domain + "y"};

X xz = {domain + "z"};
我尝试将
域声明为
std::string
char*
char[]
。我也尝试过省略和不省略
+
。我希望避免创建本地变量或使用strcopy,因为我认为这会通过增加复杂度(理想情况下应该是3行左右)来最小化代码可读性增益。另外,我通过将
声明为
std::string
并调用
.c_str()
,实现了它的功能;e、 g.
xxx={(域+“X”).c_str()},但这也损害了imo的可读性

我想可能的答案是我不得不忍受重复子字符串,或者使用一些增加冗长的东西。但是也许我的C++无知和缺乏精确的术语意味着我在试图寻找解决方案时错过了一些显而易见的东西。 关于修改
X
的编辑:


我不能修改代码库中很多地方使用的结构
X
(它是某种依赖项/实用程序),也不能在其他地方使用时总是使用“X.com/”来构造它。

首先,在C++03中不推荐将字符串文本分配给
char*
,并从C++11中删除
x
应该是
const char*
作为标准投诉

由于您不能修改
X
,因此可以使用一个小技巧,利用以下事实:在编译过程中,除了空格之外,没有任何分隔的字符串文本会合并在一起。这意味着如果你有

"hello " "world"
编译器将把它合并到

"hello world"
知道了这一点,您可以利用预处理器定义一个符号,如

#define DOMAIN "x.com/"
然后你可以用它来初始化你的对象,比如

X xx = {DOMAIN "x"};

X xy = {DOMAIN "y"};

X xz = {DOMAIN "z"};
这就决定了

X xx = {"x.com/x"};

X xy = {"x.com/y"};

X xz = {"x.com/z"};

给你。

FWIW
xxx={(域+“X”).c_str()}
留给您一个悬空指针,因此它肯定不是您想要的(它也应该无法编译,因为它违反了const正确性)。一个简单的解决方法是让
X
存储对公共部分的引用,然后让成员变量包含非公共部分。哦,我不知道指针问题。关于这一建议,大型团队在许多其他地方使用struct X。我不能修改它,在其他地方使用时,它也不总是用“x.com/”构建。