C++ 混合c样式字符串与c++;串

C++ 混合c样式字符串与c++;串,c++,c,string,optimization,c-strings,C++,C,String,Optimization,C Strings,我试图从一个网站上解决一个编程问题,结果超过了时间限制。现在我尝试改变我的代码的一些部分,在这里我使用C++字符串到C样式字符串。 下面是我的代码中的一部分,我希望得到一些建议: x1 = X1 + X2 + X3; x2 = X1 + X3 + X2; x3 = X2 + X1 + X3; x4 = X2 + X3 + X1; x5 = X3 + X2 + X1; x6 = X3 + X1 + X2; 以前,上面所有的变量都是C++字符串,现在

我试图从一个网站上解决一个编程问题,结果超过了时间限制。现在我尝试改变我的代码的一些部分,在这里我使用C++字符串到C样式字符串。 下面是我的代码中的一部分,我希望得到一些建议:

    x1 = X1 + X2 + X3;
    x2 = X1 + X3 + X2;
    x3 = X2 + X1 + X3;
    x4 = X2 + X3 + X1;
    x5 = X3 + X2 + X1;
    x6 = X3 + X1 + X2;

以前,上面所有的变量都是C++字符串,现在我已经把大写字母改为C样式,所以这些赋值不再有效了…p> 初始化小写字母的最快方法是什么

x1 = X1; 
x1 += X2; 
x1 += X3;

小写字母的唯一用途是在此比较中:

if(current == x1 || current == x2 || current == x3 || current == x4 || current == x5 || current == x6)

“当前”是C++字符串(而这一个我不会改变,因为我通过容器内的元素更新它的值)

这个IF要执行很多次,所以我想知道让x1。。。X6作为C++字符串(我想如果比较C++字符串和C风格字符串,它将调用C++字符串中的构造函数,并在比较之前传递C样式作为参数)。 编辑:

重新表述:我想在第二节中知道的是:

当我这样比较时:

string st = "something";
char st2[20] = "other thing";
if(st == st2) 
它将调用构造函数字符串(st2)并将构造的字符串与左边的字符串进行比较吗?假设我做了这个比较,如果St2已经是C++字符串,那么它会更快吗?
EDIT2:完整的代码是

如果你想要速度,不要仅仅为了比较而创建字符串;特别是,不要创建六个字符串,因为有时您可能只需要其中的一个或两个。它们是C字符串还是C++字符串无关。 你知道
X1
X2
X3
有多长吗?如果不知道的话,很容易找到答案。假设你知道,你想知道的是:

if (   current.compare(0, lenX1, X1) == 0 &&
       (   current.compare(lenX1, lenX2, X2) == 0
           && current.compare(lenX1+lenX2, lenX3, X3) == 0 
        || current.compare(lenX1, lenX3, X3) == 0
           && current.compare(lenX1+lenX3, lenX2, X2) == 0)
    || current.compare(0, lenX2, X2) == 0 &&
       (   current.compare(lenX2, lenX1, X1) == 0
           && current.compare(lenX2+lenX1, lenX3, X3) == 0
        || current.compare(lenX2, lenX3, X3) == 0
           && current.compare(lenX2+lenX3, lenX1, X1) == 0)
    || current.compare(0, lenX3, X3) == 0 &&
       (   current.compare(lenX3, lenX1, X1) == 0
           && current.compare(lenX3+lenX1, lenX2, X2) == 0
        || current.compare(lenX3, lenX2, X2) == 0
           && current.compare(lenX3+lenX2, lenX1, X1) == 0))
当然,你的版本更具可读性,而我的版本可能有拼写错误


我怀疑这也是没有必要的;你需要重新检查你的设计。为什么要使用串联字符串而不是小整数的元组?

您到底想做什么?不要假设C字符串会比C++字符串快得多。这一切都归结于你的算法,即避免复制。无论如何,使用strcmp比较C字符串是很简单的。C不支持运算符重载,因此,无论您在哪里使用带有
+
=
运算符的字符串,都必须分别替换为
strcat/strcpy
strcmp
。如果您发布更多相关代码,这将非常有用。我知道,我的问题不仅仅是。。。问题是:此代码用于BFS,图形中的最大节点数为511920。。。我正在使用队列和集合中的字符串(以了解谁已经被访问过)。。。但不使用集合的部分和我可以更改为CPerhaps的队列,您应该将完整代码发布到。这是一个图形问题,我在网格中最多跟踪3个机器人9x9。。。X1、X2、X3是机器人必须到达的坐标(每个机器人必须在一个坐标系中到达,不管每个坐标系中谁到达)。。。因为谁到达每个目标并不重要(只要他们所有人同时到达一个目标),我使用这些x1…x6作为他们可能到达的排列(x1表示R1到达G1,R2在G2,R3在G3,R=机器人,G=目标)@nightshade:我肯定你有比字符串更好的选择。我想每个机器人都有一对,然后把3对放在一个集合中(在用一些东西包裹它们之后),但后来我想到了把字符串放在一个串联中(我曾考虑为每个机器人坐标指定不同的大小,但如果其中一些恰好为0,则我可能会为不同的位置重复值)网站不使用C++ 11,所以我甚至没有检查如何使用元组@ RICWELL,猜这个比较方法清楚地表明在做它的时候没有创建一个新的字符串…谢谢
if (   current.compare(0, lenX1, X1) == 0 &&
       (   current.compare(lenX1, lenX2, X2) == 0
           && current.compare(lenX1+lenX2, lenX3, X3) == 0 
        || current.compare(lenX1, lenX3, X3) == 0
           && current.compare(lenX1+lenX3, lenX2, X2) == 0)
    || current.compare(0, lenX2, X2) == 0 &&
       (   current.compare(lenX2, lenX1, X1) == 0
           && current.compare(lenX2+lenX1, lenX3, X3) == 0
        || current.compare(lenX2, lenX3, X3) == 0
           && current.compare(lenX2+lenX3, lenX1, X1) == 0)
    || current.compare(0, lenX3, X3) == 0 &&
       (   current.compare(lenX3, lenX1, X1) == 0
           && current.compare(lenX3+lenX1, lenX2, X2) == 0
        || current.compare(lenX3, lenX2, X2) == 0
           && current.compare(lenX3+lenX2, lenX1, X1) == 0))