【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2331|回复: 3

一个实现字符串反转的函数

[复制链接]
发表于 2009-8-9 00:37:19 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. #include <iostream>
  3. void reverse_str(char * ch);
  4. void reverse_str2(char *ch);
  5. int main(void)
  6. {
  7. char c[] = "Where there is a will, there is a way!";
  8. printf("original string c: \n%s\n", c);
  9. reverse_str(c);
  10. printf("reversed string after calling reverse_str: \n%s\n", c);
  11. reverse_str2(c);
  12. printf("reversed string after calling reverse_str2: \n%s\n", c);
  13. getchar();
  14. return 0;
  15. }
  16. void reverse_str(char *ch) /*使用中间变量*/
  17. {
  18. int len;
  19. int i;
  20. len = strlen(ch)-1;
  21. char ctemp;
  22. for(i = 0; i < len-i; i++)
  23. {
  24. ctemp = ch;
  25. ch = ch[len-i];
  26. ch[len-i] = ctemp;
  27. }
  28. }
  29. void reverse_str2(char *ch) /*不用中间变量*/
  30. {
  31. int len;
  32. int i;
  33. len = strlen(ch)-1;
  34. char ctemp;
  35. for(i = 0; i < len-i; i++)
  36. {
  37. ch = ch ^ ch[len-i];
  38. ch[len-i] = ch ^ ch[len-i];
  39. ch = ch ^ ch[len-i];
  40. }
  41. }
复制代码
发表于 2012-8-18 22:42:16 | 显示全部楼层
貌似你最后应该是putchar吧,是不是楼主打错字了。因为你上面的2个函数已经实现了反转字符串。你还要getchar不明白你要做什么。
发表于 2012-8-19 11:08:39 | 显示全部楼层
getchar();是让程序停下来,便于看到运行结果。
否则程序执行的时候控制台会一闪而过,自动关闭。
发表于 2012-8-26 15:18:13 | 显示全部楼层
我比较亲相遇使用循环内部加^运算的方式。简单,胆码简介。其实也就是一个便利换位不过我通常会用另一种循环嵌套方式去实现。
for(int i = 0 ; i < lenth-1;i++)
{
   for(int j = i +1; i < lenth; j++)
   {
      ch[i] = ch[i] ^ch[j];
      ch[j] = ch[j] ^ch[i];
      ch[i] = ch[i] ^ ch[j];
   }
}
你看下我下面的这种方式计算怎么样?是不是会更好提高计算机的计算效率?
char b;
        for(int i = 0; i < 10; i++)           //获取字符
        {
                *(a + i) = getchar();
        }
        for(int i = 0; i < 10/2; i++)      //逆序数出字符
        {
                b = *(a + (10 - i - 1));
                *(a + (10 - i -1)) = *(a + i);
                *(a + i) = b;
        }
        for(int i = 0; i < 10; i ++)          //数出结果
                cout<<a[i]<<' ';
        cout<<endl;
        return 0;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 09:53

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表