字符串的倒置

crazy_student 2011-03-09 01:31:34
写一个字符串倒置的函数,Reverse_String(char *str) 要求不使用任何的变量,例如"Hello World"字符串倒置之后变成"dlrow olleH" 请大牛们指点下!
...全文
645 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
李亚超 2011-03-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/Harry_lyc/archive/2011/03/07/6230154.aspx


void reverse_str(const char * str1, char * str2)

{

if(*str1 !='\0')

{

reverse_str(str1 + 1, str2);

while(*str2 !='\0')

{

str2 ++;

}

* str2 = *str1;

*(str2+1) = '\0';

}

else

{

str2 = '\0';

}

}
good778899 2011-03-09
  • 打赏
  • 举报
回复

Reverse_String(char *str)
{
int p=0;
while(str[p]!='\0') //判断是不是空字符
p++;
while(p)
{p--;
cout<<str[p];//输出
}

}
smwhotjay 2011-03-09
  • 打赏
  • 举报
回复
_strrev时首尾对调.尾指针前移2字节开始.
littlerz 2011-03-09
  • 打赏
  • 举报
回复
Reverse_String(char *P,int n){
char *q;
q = p+n-1;
while(q>p){
temp = *p;
*p = *q;
*q = temp;
p++;
q--;
}
}

该函数是通过指针来实现的;其中*q为指向字符数组尾部的指针;
n为字符串的长度,在main中可以用strlen()函数取得;
progue 2011-03-09
  • 打赏
  • 举报
回复
可以用栈的方法吧,建立个栈,先进后出,一个个压人栈,再弹出就是倒序了~
xgrsb2005 2011-03-09
  • 打赏
  • 举报
回复
void Reverse_String(char *str)
{
if(str[0]=='\0')
{
return;
}
Reverse_String (&str[1]);
putchar(str[0]);
}

这叫递归,你懂的
千杯不醉-sen 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yangsen600 的回复:]
C/C++ code

void swap(char &a,char &b){
a = a^b;
b = a^b;
a = a^b;
}

void Reverse_String(char *str){
int len = strlen(str);
for (int i = 0; i < len/2; ++i){
……
[/Quote]
不符合条件...
masmaster 2011-03-09
  • 打赏
  • 举报
回复
只会最笨的法子。。。

#include <stdio.h>

int main (void) {

char string[]="hello,world!";
char temp;
int len=0,i,j;
while(string[len]!='\0') {
len++;
}
for(i=0,j=len-1;i<len/2;i++,j--) {
temp=string[i];
string[i]=string[j];
string[j]=temp;
}
printf ("%s\n",string);
return 0;

}

千杯不醉-sen 2011-03-09
  • 打赏
  • 举报
回复

void swap(char &a,char &b){
a = a^b;
b = a^b;
a = a^b;
}

void Reverse_String(char *str){
int len = strlen(str);
for (int i = 0; i < len/2; ++i){
swap(str[i], str[len-1-i]);
}
}
//库函数也不用,额外变量也不用,我还真想不到...
//以前有过一个题目:
//计算1+2+3+...+100的和。
//条件:不用你学过的判断语句,循环语句等。
//如:if...else,while,do...while,for,switch,goto以及三目运算符等。
//我还是没有想到...
碎碎念 2011-03-09
  • 打赏
  • 举报
回复

void Reverse_String(char *str)
{
if(*str=='\0')
return;
else
{
Reverse_String(str[1]);
printf("%c",*str);
return;
}
}
NowDoIT 2011-03-09
  • 打赏
  • 举报
回复
给个链接先,欢迎指正!
http://blog.csdn.net/NowDoIT/archive/2011/01/11/6128524.aspx

另外,不用变量,不用函数?
那就用栈的方法,先进后出好了。
太乙 2011-03-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void ReverseStr( const char* s1 ,char* s2)
{
*((int*)s2) = 0;
while (*s1)
{
s1++;
*((int*)s2) += 1;
}
s1 -= *((int*)s2);
s2 += *((int*)s2);
*s2-- = '\0';
while (*s1)
{
*s2-- = *s1++;
}
return ;
}
int main()
{
const char* p = "hello";
char pp[100];
ReverseStr(p, pp);
cout << pp << endl;

return 0;
}
crazy_student 2011-03-09
  • 打赏
  • 举报
回复
补充一下 不使用任何库函数 该函数怎么实现!
千杯不醉-sen 2011-03-09
  • 打赏
  • 举报
回复

void Reverse_String(char *str)
{
if(str[0]=='\0')
{
return;
}
Reverse_String (&str[1]);
putchar(str[0]);
}
赵4老师 2011-03-09
  • 打赏
  • 举报
回复
c:\Microsoft SDK\src\crt\strrev.c
/***
*strrev.c - reverse a string in place
*
* Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines _strrev() - reverse a string in place (not including
* '\0' character)
*
*******************************************************************************/

#include <cruntime.h>
#include <string.h>

/***
*char *_strrev(string) - reverse a string in place
*
*Purpose:
* Reverses the order of characters in the string. The terminating
* null character remains in place.
*
*Entry:
* char *string - string to reverse
*
*Exit:
* returns string - now with reversed characters
*
*Exceptions:
*
*******************************************************************************/

char * __cdecl _strrev (
char * string
)
{
char *start = string;
char *left = string;
char ch;

while (*string++) /* find end of string */
;
string -= 2;

while (left < string)
{
ch = *left;
*left++ = *string;
*string-- = ch;
}

return(start);
}
LinuxBirdMan 2011-03-09
  • 打赏
  • 举报
回复
。。先把整个字符串倒转,然后把字符串中的每个单词倒转即可。。。
newfarmerchi 2011-03-09
  • 打赏
  • 举报
回复

#include <stdio.h>

void Reverse_String (char *str)
{
if(str[0]=='\0')
{
return;
}
else
{
Reverse_String (&str[1]);
printf("%c",str[0]);
}
}
int main()
{
char s[]="Hello World";

Reverse_String(s);

printf("\n");

return 0;
}

delphiwcdj 2011-03-09
  • 打赏
  • 举报
回复
lida2003 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goonyangxiaofang 的回复:]
C/C++ code

int i, len = strlen(str);
for (i = 0; i < len/2; ++i)
{
swap(a[i], a[len-1-i]);
}
[/Quote]

「已注销」 2011-03-09
  • 打赏
  • 举报
回复
呃。。这个只要把字符串的对应位置的字符互换就行了。。。确实不用中间变量。。。
加载更多回复(1)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧