2年前去T公司面试,面试官给了我一张纸一支笔,说写个程序吧,输入一个字符串然后反序输出。我问输入输出是用函数参数呢还是系统I/O,面试官说随你便,写完了说说各有什么优缺点吧。当时我大三,没有参加过ACM没有实验室经历除了课程设计也没写过什么程序,完全小白。当然至今也仍然是菜鸟一只,不堪回首啊。

方法一:据说有库函数strrev()啊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{if (argc != 2){printf("Usage: %s string/n/n", argv[0]);return -1;}char* str = argv[1];strrev(str);printf("Reversed string: %s/n", str);return 0;
}

结果Linux下编译报错,说找不到strrev()这个函数,我勒个去,坑爹呢这是?VS2010编译通过正常运行。好吧,还是自己来写一个吧~

方法二:首尾互换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cstring>
using namespace std; char *reverse(char *str)
{int len = strlen(str);char *head = str;char *tail = str + len - 1;while (head &lt; tail){char tmp = *head;*head++ = *tail;*tail-- = tmp;}return str;
}
int main(int argc, char* argv[])
{if (argc != 2){cout << "Usage: " << argv[0] << " string" << endl;return -1;}cout << "Reversed string: " << reverse(argv[1]) << endl;return 0;
}

终于都通过了啊。就用了个循环把字符串里的字符逐个首尾互换了。啥?性能?有啥问题?没看到每次进循环都要新建变量tmp吗?这这这。。。这也有影响?好吧,把这个声明放到循环外面。还能提升么?去掉字符互换操作!!直接从尾巴倒过来输出不就得了~

方法三:从尾到头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
using namespace std;
int main()
{string str;cout << "Input: ";cin >> str;unsigned int i = str.length();cout << "Reversed string: ";while(i != 0){cout << str[i-1];--i;}cout << endl;return 0;
}

这回用了I/O做输入,并且还能保留原来的字符串不变。嗯,不错不错,其实我们连字符串长度都不需要知道。再写一个~

方法四:递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
void reverse(char *str)
{if(*str)reverse(str+1);elsereturn;cout << *str;
}
int main()
{char str[1024] = {NULL};cout << "Input: ";cin >> str;reverse(str);cout << endl;return 0;
}

估计一般没人会这么写吧。。。

C/C++反序输出字符串总结相关推荐

  1. 字符串反序输出字符串

    Console.Write("请输入一个字符串:"); string str = Console.ReadLine(); string reverse = "" ...

  2. 利用指针反序输出字符串

    输入:ABCDEFGHIJ 输出 :J I H G F E D C B A 这道题思路就是先让指针指向字符数组的最后的元素,再用do-while循环让指针遍历整个数组并输出,还要记得输出空格. 头文件 ...

  3. c语言字符串单词反序输出,字符串中的每个单词倒序输出问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void sub_reverse(char *); int main() { char str[256] = "The onl ...

  4. 编程小练习:最大公约数,字符串反序输出,全排列,不用加减法求和,字符串内容反序,字符串中最长数字串,数组是否递增,数组反转,链表反转,翻转单词顺序

    最大公约数 --- 递归.非递归 #include <stdio.h>int gcd(int a, int b); int gcd_recursive(int a, int b);int ...

  5. linux shell:字符串分割并反序输出

    我想将一个以.分割的字符串(com.sun.java)反序输出为(java.sun.com),在这里<Reverse order of dot-delimited elements in a s ...

  6. C语言经典例27-利用递归逆序输出字符串

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. 2 分析 从递归程序设计三大要素角度来分析: 该递归程序的目的:逆序输出字符 ...

  7. 1-3 数组的反序输出

    1-3 数组的反序输出 Time Limit: 1000MS Memory Limit: 65536KB Problem Description C++中数组的输入输出方法. 10个int型数组中,而 ...

  8. C语言将任意的正整数按反序输出

    将任意的正整数按反序输出 要实现的功能如下 完整源代码实现如下 要实现的功能如下 输入"123456789"输出"987654321" 完整源代码实现如下 #i ...

  9. 信息学奥赛一本通 2034:【例5.1】反序输出

    [题目链接] ybt 2034:[例5.1]反序输出 [题目考点] 1. 数组填充 设数组a, 变化的下标ai,初值为0 例: int a[105], ai = 0; 方法1:填充到下标0~ai-1 ...

最新文章

  1. Java如何优雅的实现时间控制
  2. ASP.NET MVC 音乐商店 - 1 创建项目
  3. leetcode算法题--Russian Doll Envelopes
  4. jsoncpp 库的使用方法
  5. mybatis的二级缓存
  6. html5弹窗全屏,jQuery炫酷全屏模态窗口插件
  7. 第一次注册苹果开发者账号
  8. up能不能应急启动计算机,启动盘 提升电脑的性能
  9. c语言课程设计酒店管理系统实验报告 免费下载,C语言酒店管理系统设计
  10. Ruby编程语言面试题库和答案(语法、代码)
  11. “跑在互联网上的售货机”友宝签约法大大
  12. 【Python】绘制GPX轨迹图并定位特定时间点
  13. 聊城大学计算机学院2016级11班,E·社会实践 | “观运河风采,忆聊城古韵”——2016级11班...
  14. ADFS 概念与基本开发介绍 (1)
  15. Pycharm启动后总 indices... indexing的问题
  16. 收入--支出=储蓄?
  17. 数据结构(C语言版第2版)课后习题答案
  18. 数学专业学金融还是计算机,高考志愿---谈一谈数学专业
  19. 元宇宙最先落地的应用场景是什么
  20. 鲁大师发布2021年度智能电动车品牌排行榜

热门文章

  1. jQuery+PHP实现浏览更多内容
  2. java获取随机值的方法
  3. THINKPAD笔记本Fn组合键介绍
  4. ELK实时分析之php的laravel项目日志
  5. hdu 1251 统计难题
  6. homebrew的安装和使用
  7. Sanboxie 5.14安装图解
  8. 计算机网络协议分层体系结构
  9. ABP源码分析三十:ABP.RedisCache
  10. Android Studio编译后报错 java.exe'' finished with non-z