您的位置:首页 > 编程语言 > C语言/C++

[置顶] 【C语言】 字符串逆序

2016-05-26 12:24 405 查看
字符串逆序有多种办法,下面我们分方法而论:

// 非递归实现字符串反转:

char *reverse(char *str)   
{   
if( !str )   
{   
return NULL;
}   
  
    int len = strlen(str);
    int i,j;   
    char temp;   
    for( i = 0,j=len-1; i<j;i++,j--)
    {   
        // 交换前后两个相应位置的字符   
         temp=str[i];
         str[i]=str[j];
         str[j]=temp;
    }   
  
    return str;   
}

int main()
{
    char src[] = {"abcdef"};
    char *pdest = reverse(src);
    puts(src);
    return 0;
}

//递归就是一种栈结构:

#include<stdio.h>
#include<assert.h>

void reverse_string(const char * const string)
{
assert(string);
    if (*string == '\0')
        return;
    else
        reverse_string(string+1);// 先将字符压栈
    putchar(*string);// 再将字符按照先进后出的顺序输出
}
int main()
{
char string[20] = {0};
scanf("%[^\n]",string); 
reverse_string(string);
printf("\n");
return 0;
}

亦可:(若要求不使用其他库函数)

#include<stdio.h>
#include<assert.h>

int my_strlen(const char *string)
{
assert(string);
if(*string == '\0')
{
return;
}
else
return 1+my_strlen(string+1);
}

char *reverse_string(char *string,int len)
{
assert(string);
if(!string)
{
return NULL;
}
if(len > 1)
{
char tmp = string[0];
string[0] = string[len-1]; 
string[len-1] = '\0';           // 最后一个字符在下次递归时不再处理
reverse_string(string + 1,len-2);//递归调用,每调用一次,要反转的字符串分别从头和末尾各减少一个 
string[len-1] = tmp;
}
return string;
}

int main()
{
char string[20] = {0};
int len;
scanf("%s",string);
len = my_strlen(string);
reverse_string(string,len);
printf("%s\n",string);
return 0;
}
本文出自 “Vs吕小布” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: