我试图解决网站上的编程问题并且超出时限。现在我试图改变我的代码的某些部分,我将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风格,因此这些分配不再有效......
初始化小写的最快方法是什么?
x1 = X1;
x1 += X2;
x1 += X3;
或
char buffer[20]; //would use x1 instead of a buffer if the answer to the second question
//is to convert it(x1) to C-style
strcpy(buffer, X1);
strcat(buffer, X2);
strcat(buffer, X3);
x1 = buffer;
小写的唯一用途是在这个比较中:
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)和比较构造的字符串调用到左边的字符串?让我说我做这个比较500000x,如果st2已经是C ++字符串会更快吗?
EDIT2:完整代码为here
答案 0 :(得分:2)
如果你想要速度,不要为了进行比较而创建一个字符串;特别是,不要创建六个字符串,因为有时可能只需要其中一个或两个。它们是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))
当然,你的版本更具可读性,而我的版本可能会有拼写错误。
我怀疑这也是不必要的;你需要重新检查你的设计。为什么使用串联字符串而不是例如小整数元组?