`
eriol
  • 浏览: 409136 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

反转字符串的优化方法

 
阅读更多

思路: 对变量交换进行优化,不适用额外的中间变量。

 

解法一:使用异或操作

 

char* strrev1(const char* str) {
       char* tmp = new char[strlen(str) + 1];
       strcpy(tmp,str);
       char* ret = tmp;
       char* p = tmp + strlen(str) - 1;
       while (p > tmp) {
              *p ^= *tmp;
              *tmp ^= *p;              
              *p ^= *tmp;
              --p;
              ++tmp;
       }
       return ret;
}

 

解法二:使用加减法

 

char* strrev2(const char* str) {
       char* tmp = new char[strlen(str) + 1];
       strcpy(tmp,str);
       char* ret = tmp;
       char* p = tmp + strlen(str) - 1;
       while (p > tmp) {
              *p = *p + *tmp;
              *tmp = *p - *tmp;
              *p = *p - *tmp;
              --p;
              ++tmp;
       }
       return ret;
}

 

方法二对于较大的整数相加可能会溢出

分享到:
评论
2 楼 eriol 2011-10-02  
chriszeng87 写道
上面和下面的代码是一样的?

就是异或和加法的区别
1 楼 chriszeng87 2011-10-02  
上面和下面的代码是一样的?

相关推荐

    字符串反转的N种方法.doc

    ### 字符串反转的N种方法:C#中的实践与探讨 #### 使用Array.Reverse方法 在C#中,`Array.Reverse`方法提供了一种简单直接的字符串反转方式。该方法实际上针对数组操作,将数组中的元素顺序进行反转。在字符串反转...

    C# 字符串反转(两种方法)

    在反转字符串时,我们可以从最后一个字符开始,逐渐向前取字符,直到取到第一个字符为止。 ```csharp using System; class Program { static void Main() { string original = "Hello, World!"; string ...

    判断是否为反转字符串.zip

    在编程领域,反转字符串是一个常见的问题,特别是在算法和数据结构的学习中。这个问题涉及到字符串操作,主要考察对字符串的处理能力和逻辑思维。在这个“判断是否为反转字符串”的项目中,我们可能遇到以下的知识点...

    反转字符串1

    7. **面试应用**:在面试中,此类问题常用来测试应聘者的算法设计能力,特别是对字符串处理的理解和效率优化的思考。此外,它还可以考察应聘者是否具备清晰地逻辑表达和解决问题的能力。 8. **扩展思考**:此题也...

    VB中对字符串的处理及其扩展

    例如,以下是一个用于反转字符串的自定义函数示例: ```vb Function StrRev(str As String) As String Dim revStr As String Dim i As Integer For i = Len(str) To 1 Step -1 revStr = revStr & Mid(str, i, 1...

    易语言八种方法倒转字符串

    本篇将详细讲解在易语言中实现字符串倒转的八种方法,并探讨它们的原理与应用场景。 1. **数组翻转法** 这是最基础的方法,通过创建一个临时数组存储原字符串的每个字符,然后从后向前填充到目标字符串。易语言中...

    《编程珠玑》中的最优性能效率最高字符串反转算法

    其中,字符串反转算法是书中讨论的一个重要主题,它涉及到了内存管理、时间复杂度优化以及算法设计等多个方面。下面我们将详细探讨这个最优性能效率最高的字符串反转算法。 首先,我们需要理解字符串反转的基本概念...

    字符串翻转(使用类库方法和stack实现)

    在编程领域,字符串翻转是一项常见的操作,它涉及到将一个字符串的字符顺序反转。这里我们将深入探讨两种实现方式:使用类库方法和栈数据结构。 首先,让我们关注使用类库方法进行字符串翻转。在Python中,有一个...

    ZIFUCHUAN.zip_字符串反转

    在文本处理中,反转字符串可以帮助识别回文词;在编程面试中,字符串反转是一个常见的测试点,考察应聘者的编程思维和基础功底。 "ZIFUCHUAN"这个文件名可能是某种编码或者谜题,也可能代表了实现字符串反转的一种...

    修改过后的字符串处理程序

    全删除功能则是查找并移除所有指定的子字符串,这可能需要用到迭代或递归的方法遍历整个字符串。这两种功能的实现需要对字符串操作有深入的理解,包括字符串的长度计算、内存管理以及效率优化。 在字符串处理中,...

    usart_整数转字符串_

    最后,由于我们是从低位向高位处理的,所以需要反转字符串。 三、考虑负数和溢出 在处理负数时,我们需要在字符串前面添加'-'符号。同时,要确保输入值不会超过预定义的字符串长度,防止溢出。对于溢出问题,可以...

    Shell中实现字符串反转方法分享

    如果需要更底层的控制或性能优化,可以使用C语言编写一个简单的程序来实现字符串的反转。 **示例代码:** ```bash gcc -o a -O2 -xc <(cat !' #include #include #include int main(int argc, char *argv[]) { ...

    字符串查找,删除,提取

    在Python中,可以结合 `rfind()` 或 `[::-1]` 反转字符串来实现这一功能。 3. **提取字符串中指定字符间的子串**: 提取特定字符之间的子串通常需要用到分隔符。例如,如果字符串是 "key1=value1;key2=value2",...

    判断字符串是否回文

    3. **简化判断逻辑**:可以使用更简洁的方法来判断回文,例如反转字符串后比较。 4. **注释与文档**:增加代码注释,提高可读性。 通过以上分析可以看出,该代码片段提供了一个简单的回文判断算法实现,同时也展示...

    各种C语言字符串函数-笔试面试必备

    字符串反转是常见的字符串操作之一,主要用于改变字符串的顺序。在C语言中,可以通过多种方式实现字符串的反转,包括但不限于while循环、for循环、位运算以及递归等。 - **版本1: while版** 这是最直观的方法,...

    华为-华为od题库练习题之字符串反转.zip

    4. **性能优化**:在实现字符串反转时,需要考虑时间复杂度和空间复杂度。最理想的解决方案是O(n),即只遍历一次字符串,而空间复杂度为O(1),即只使用常量级别的额外空间。例如,字符数组反转法就满足这两个条件。 ...

    计算机科学中回文字符串判定算法的多种实现及优化

    内容概要:本文详细介绍了判断回文字符串的几种常见方法,包括双指针法、字符串反转法、忽略大小写及非字母字符的扩展判断以及使用栈的方法。每种方法都提供了 Java 和 Python 的代码实现,并讨论了各自的优缺点。...

    移除字符串中空格和回车符

    本文档主要介绍了三种不同的方法来移除字符串中的空格和回车符: 1. **移除所有空格**:该方法会遍历整个字符串,并移除所有出现的空格。 2. **移除末尾空格**:只移除字符串末尾的空格。 3. **移除回车符**:同样...

    C++ 字符串的反转五种方法实例

    递归方法通过交换首尾字符并递归处理剩余部分来反转字符串。这种方法在处理较短字符串时效率较高,但由于递归,可能会导致栈溢出问题。 ```cpp char* strrev5(char* str, int len) { if (len ) return str; ...

    字符串反转编程珠玑1

    从《字符串反转编程珠玑1》这一主题,我们可以深入探讨这些算法问题背后的设计思想以及解决方法。根据描述,这里的向量旋转问题具体化为将给定的字符串形式的一维向量向左旋转特定的步数,这既是字符串操作的变异,...

Global site tag (gtag.js) - Google Analytics