关于字符串逆序的问题

本文提供了三种不同的字符串逆序实现方式,包括递归方法、规范化的C语言版本以及ARM汇编语言版本,每种方法都有其特点,适用于不同场景。

有人考我字符串逆序的算法,我居然写不上来,懊恼死了。 
当时脑海里想的是用堆栈的算法,可是又不会写,至于递归,硬是没想到。

题目:实现字符串逆序函数 reverse(char   *str)
答案:

1。最简单的,不一定规范但能实现。

 

   void    reverse( char     * str)  
 
{   
          
if   (!*str)   return;   
          fun(str
+1);   
          printf(
"%c",*str);   
  }
  

 

2。比较规范的C

 

   char *    reverse( char     * cpSource)   
  
{   
                
static   char   *cpTemp   =   NULL;   
                
if(cpTemp   ==   NULL)   cpTemp   =   cpSource;   
                
if(*(cpSource+1))   reverse(cpSource+1);   
                
if(cpSource-cpTemp   >   0)   
                
{   
                            
char   cTemp   =   *cpTemp;   
                           
*cpTemp++   =   *cpSource;   
                           
*cpSource   =   cTemp;   
                }
   
                
return   cpSource;     
  }
 

 

3。另外找了个ARM汇编的版本

 

data segment
string1 db 
'  abcdefg '
count  equ $
- string1
string2 db count dup(
? ), ' $ '
data ends

code segment
assume cs:code,ds:data
start:mov ax,data
      mov ds,ax
      mov cx,count
      mov si,offset string1
      add si,cx
      dec si
      mov di,offset string2
lop1: mov al,[si]
      mov [di],al
      dec si
      inc di
loop  lop1
mov dx,offset string2
mov ah,
9
int  21h
mov ah,4ch
int  21h
code ends
end start

 

 

附:参考地址
这里就给汇编的,C的太多了,随便搜搜就能找到。
『Win32/Win64编程』 > 【讨论】来个简单题目,看哪位兄弟写的最好!
基本汇编语言程序设计 - 字符串逆序显示

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值