用于在c中反转字符串的优化代码

时间:2012-11-15 17:29:26

标签: c c-strings

我总是使用c代码将字符串反转为:

  1. 循环我直到弦的长度或直到其长度的一半
  2. 将指针放在字符串的末尾和开头
  3. 逐一交换它们。
  4. 但是我想要一个优化的代码,除了我提到的那个之外,还可以减少这个问题的时间复杂度。我试过谷歌搜索,但没有找到任何相关的解决方案。

2 个答案:

答案 0 :(得分:4)

如果“时间复杂度”指的是排除系数和低阶项的大O符号,那么你将无法击败简单的O(n)算法来反转C字符串。

如果您指的是特定机器(或机器类)执行操作所需的时间,则有许多方法可以优化反转。典型的优化包括loop unrolling,通过机器字而不是字符消耗字符machine word,以及智能搜索终止NUL字符。免费提供的GNU libc包含examples of such optimizations

上述一些优化(例如循环展开)可以通过优化编译器自动实现。其他人可能会在某些平台上适得其反,或者他们的加速取决于字符串的大小。在某些情况下,手写优化可能会妨碍编译器自己优化代码的工作。确保您不会让事情变得更糟的唯一方法是,开发一个涵盖您的预期用途的基准测试,并在您进步时仔细地对您的代码进行基准测试。

答案 1 :(得分:0)

for(fctr=0,bctr=len-1;fctr<len/2;fctr++,bctr--)
{ 
    temp=str[fctr];
    str[fctr]=str[bctr];
    str[bctr]=temp;
}

这可能会很快!