`

字符串的逆序之旅

阅读更多

 

这两天在看《编程珠玑》,第一章就收获非常的多,真的挺后悔现在才看着本书,第二章有个将字符串逆序的例子,就是比如“this is a string”变成“string a is this”,那么今天就总结一下这个逆序字符串的小专题。

       首先假设有人问你:如何将“this is a string”完全逆序,也就是gnirts a si siht

       方案一:申请一个同样大小的空间,直接逆序将字符串保存一遍。                                                                            


 

       这是我们最容易想到的一种方法,我们只需要找到字符串尾指针就好了,下面就是一段简单的代码:

        

        这个代码的关键是找准字符串尾的位置,(每一个字符串以‘\0’结尾)

 

        那么,现在我们的问题增加了,再开一个n,空间太大了,我们必须减少空间。。。

        方案二:其实仔细观察就会发现,逆序其实就是不断的首尾交换,比如abcde首先是a和e进行交换,接着是b和d交换,这样以此类推n/2次交换就可以完成任务了,这个的远离其实就是我们早就会的轴对称。


 

       

        写这个方法的时候,我曾经犯的错误就是把right-- 写成了right++,结果悲剧的段错误就出现了,希望大家不要有这样低级的失误。

 

        现在问题又的苛刻了,干脆不允许我们用临时变量了,该如何使字符串逆序,这个时候

        方案三:有没有想起以前有一个经典的问题就是,如何不经过临时变量如何交换两个整数,那就是经典的;


 

        a = a + b;

        b = a - b;  //此时 b = a

        a = a - b ; //此时 a = b         

        其实我们还可以使用一个渐渐被我们遗忘的操作符,那就是异或^,补一点小知识,两个数异或,比如1101和1001,相同位为0,不同位为1,则结果为0100,所以任何数和0异或的结果都是其本身,一个数和自身异或的结果就是0.

        于是上面的代码其实也可以这样来写

       a = a ^ b;

       b = a ^ b;

       a = a ^ b;            哈哈,是不是感觉非常的棒。

      有了这个思路的话,接下来实现无临时变量的交换就变得非常的简单了        

       

        还是那句话,注意符号。。。

 


 

       最后回归话题了,我们不是要完全的逆序,而是要求每一个单词的逆序,比如 “string a is this”,说真的第一次看这个问题就是一下子头很乱,无从下手,《编程珠玑》中的提示就是逆序的逆序,一下子就有了灵感,我们把这个字符串抽象成ABCD,我们用A~表示其逆序,这样(A~B~C~D~)~就是DBAC了。通俗的描述就是先对每一个单词求逆序,得到 siht si a gnirts,然后对整个字符串逆序,也就得到了string a is this

 

     

      好了,大功告成了,这样我们一步步的归纳了一下字符串逆序的种种~希望对大家有所帮助。

更多信息请查看 java进阶网 http://www.javady.com

分享到:
评论

相关推荐

    字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释

    字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释字符串逆序+c语言字符串逆序输出+c语言字符串逆序逐行解释字符串逆序+c语言字符串逆序输出+c语言...

    字符串逆序 - 字符串逆序算法

    字符串逆序

    c 语言字符串逆序 c 语言字符串逆序

    c 语言字符串逆序 c 语言字符串逆序c 语言字符串逆序 c 语言字符串逆序c 语言字符串逆序 c 语言字符串逆序c 语言字符串逆序 c 语言字符串逆序c 语言字符串逆序 c 语言字符串逆序c 语言字符串逆序 c 语言字符串逆序c ...

    c语言字符串逆序输出+c语言字符串逆序逐行解释

    c语言字符串逆序输出c语言字符串逆序输出+c语言字符串逆序逐行解释c语言字符串逆序输出+c语言字符串逆序逐行解释c语言字符串逆序输出+c语言字符串逆序逐行解释c语言字符串逆序输出+c语言字符串逆序逐行解释c语言字符...

    PTA 6-13 函数实现字符串逆序

    在编程领域,字符串逆序是一种常见的操作,尤其在数据结构和算法的学习中。PTA(Programming Training Arena)是一个在线编程训练平台,它提供了各种练习题目来帮助学生提升编程技能。题目"PTA 6-13 函数实现字符串...

    字符串逆序字符串逆序字符串逆序字符串逆序.txt

    字符串逆序字符串逆序字符串逆序字符串逆序字符串逆序字符串逆序

    什么是字符串逆序以及学习字符串逆序的意义是什么

    ### 字符串逆序及其学习意义详解 #### 一、字符串逆序定义 字符串逆序,顾名思义,指的是将一个字符串中的字符按照相反的顺序重新排列。例如,如果原始字符串是 "Hello",那么经过逆序操作之后的结果将是 "olleH...

    1162:字符串逆序.cpp

    1162:字符串逆序 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 31557 通过数: 20735 【题目描述】 输入一串以‘!’结束的字符,按逆序输出。 【输入】 如题述。 【输出】 如题述。 【输入样例】 abc! 【输出...

    字符串逆序输出

    简单汇编程序:输入字符串逆序输出(两种)

    c++ 字符串逆序输出

    c++ 字符串逆序输出 用vs2005打开

    字符串逆序算法示例 VC CUI程序

    在编程领域,字符串逆序是一种常见的操作,尤其在C++编程中,我们经常需要实现这样的功能。本示例是基于VC++(Visual C++)的命令行界面(CUI)程序,它展示了如何通过C++语言来实现字符串的逆序。下面我们将详细...

    字符串逆序输出算法

    标题中的“字符串逆序输出算法”是指一种计算机编程技术,主要目标是将输入的字符串按照相反的顺序打印出来。在C++中,这通常通过递归或者栈等数据结构来实现。描述中提到的“算法精巧”,可能指的是用较少的代码...

    递归实现字符串逆序

    ### 递归实现字符串逆序 #### 知识点概览 本文将详细介绍如何使用C++中的递归技术来实现字符串的逆序操作。逆序字符串是一个常见的编程问题,在多种场景下都有应用,例如文本处理、算法设计等。通过递归方法解决此...

    字符串逆序-使用C语言+递归实现字符串逆序.zip

    在编程领域,字符串逆序是一种常见的操作,尤其是在处理文本数据时。C语言作为一种基础且强大的编程语言,提供了灵活的方式来处理字符串。本主题将深入探讨如何使用C语言和递归方法来实现字符串逆序。 首先,我们...

    7-3 字符串逆序.py

    7-3 字符串逆序.py

    字符串逆序-使用C#实现的字符串逆序.zip

    在这个“字符串逆序-使用C#实现的字符串逆序.zip”压缩包中,很可能包含了一个或多个C#源代码文件,用于演示如何在C#环境中进行字符串逆序的操作。下面,我们将深入探讨C#中字符串逆序的几种常见方法。 首先,C#中...

    腾讯在线笔试题-字符串反转,以及把整个字符串逆序

    本知识点将围绕如何进行字符串反转以及把整个字符串逆序来进行讲解。首先,字符串反转是编程中常见的问题,常常用于各类笔试和面试中。而字符串逆序则是在反转的基础上,进一步处理,让整个字符串的顺序完全颠倒。 ...

    C 语言 指针实现字符串的逆序调序输出

    在C语言中,指针是其强大的特性之一,它允许我们直接操作内存地址,因此在处理字符串时,指针能够发挥关键作用。本程序旨在通过指针实现字符串的逆序和调序输出,这两个概念是字符串操作中的常见技巧。 逆序输出...

    LabVIEW以字符串逆序+正则形式快速读取文本最后一行.zip

    此程序的创新之处在于结合了字符串逆序和正则表达式,有效地提高了读取大文件最后一行的效率,减少了内存占用和处理时间。这对于需要频繁处理大量文本数据的工程应用非常有用。 总的来说,通过学习这个LabVIEW程序...

    PTA实验函数实现字符串逆序包含题目解析和解答C语言

    PTA(Programming Training Arena)实验8-1-6要求我们实现一个函数,该函数能接收一个字符串并将其逆序,同时在函数内部不能定义数组且不能调用任何字符串处理函数。这是一项对基本操作和循环控制的测试,主要涉及到...

Global site tag (gtag.js) - Google Analytics