Chinaunix首页 | 论坛 | 博客
  • 博客访问: 258087
  • 博文数量: 56
  • 博客积分: 1264
  • 博客等级: 中尉
  • 技术积分: 491
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-19 15:16
文章分类

全部博文(56)

文章存档

2012年(10)

2011年(46)

分类: C/C++

2011-10-24 10:09:50

char *strreverse(char *dest,char *src)//反转字符串,have tested
{
 /*
 把字符串的两头进行掉换,这样即省资源又降低了复杂度,还有一问题,可能有dest==src
 */
 /*
 在写此程序时考虑的问题:(我写程序时总考虑一些问题,列举出多不可行的办法
 所以我写程序的时候很犹豫)

 如果函数入口的变量为(char **dest,char *src);那么可以为他直接分配一个空间
 哦,明白,这违背了多占用了空间的原则

 如果还是用原来接口即:(char *dest,char *src)那么,就分两种情况考虑:
 第一,当dest==src也就说是输入等输出的时候
 第二,就是当dest的空间大小不够了,其实按照strcpy()这函数来讲,这问题不应
 是在这个程序里边考虑的问题,因为dest的空间在调用此函数之前必须保证足够,
 要不会出现问题.那我这程序也在这种保证下编写的,当然,会进行检查的
 */
 int srclen=strlen(src);
 int destlen=strlen(dest);
 char c;
 if(destlen  return NULL;
 if (dest==src)//是以自己为输入输出的,这种方式就用两边对换的方法
 {
  destlen=destlen/2;
  while (srclen>destlen)
  {
   c=*src;
   *src=*(dest+srclen-1);
   *(dest+srclen-1)=c;
   src++;
   srclen--;
  }
 }
 else//输入和输出不相等,那么要进行所有的对换啊
 {
  while (srclen>0)
  {
   *dest++=*(src+srclen-1);
   srclen--;
  }
  *dest=0;//把/0给dest
 }
 return src;
}

 

如果输入同时也为输出的时候,请要搞清楚src和dest是不是常量,如果是的话,运行的时候会出错误,而编译的时候没什么问题例如你这样调用本函数:

int main(viod)

{

char * str="abcdefg";

strreverse(str,str);//这样是错误的,因为str为常量,不能做为输出的

}

//当然,解决上述问题,只需用改一个输出(char *dest)类型就行了,把它改成(char **str)

阅读(2187) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

whyliyi2011-10-24 13:43:57

使用栈的方式应该更简单一些