剑指offer之翻转单词顺序

举报
chenyu 发表于 2021/07/27 01:36:01 2021/07/27
【摘要】 1 题目 输入一个英文橘子,翻转句子中的单词顺序,但是单词内字符串的顺序不变,简单起见,标点符号和普通字符字母一样处理,例如输入字符串"I am a student.",则输出"student. a am I"               2 思路 先反转字符串所有,然...

1 题目

输入一个英文橘子,翻转句子中的单词顺序,但是单词内字符串的顺序不变,简单起见,标点符号和普通字符字母一样处理,例如输入字符串"I am a student.",则输出"student. a am I"
 

 

 

 

 

 

 

2 思路

先反转字符串所有,然后在反转里面的单词,我们用两个首尾指针操作

 

 

 

 

 

 

 

3 代码实现


  
  1. #include <stdio.h>
  2. /*
  3. * 反转整个字符串
  4. */
  5. void reverse(char *begin, char *end)
  6. {
  7. if (NULL == begin || NULL == end)
  8. return;
  9. while (begin < end)
  10. {
  11. char temp = *end;
  12. *end = *begin;
  13. *begin = temp;
  14. ++begin;
  15. --end;
  16. }
  17. }
  18. /*
  19. * 反转字符串里面的单词
  20. */
  21. char* reverseNumeber(char *str)
  22. {
  23. if (NULL == str)
  24. {
  25. return NULL;
  26. }
  27. char *begin = str;
  28. char *end = str;
  29. while (*end != '\0')
  30. {
  31. end++;
  32. }
  33. --end;
  34. //反转整个字符串
  35. reverse(begin, end);
  36. //再反转里面的单词
  37. begin = end = str;
  38. while (*begin != '\0')
  39. {
  40. if (*begin == ' ')
  41. {
  42. begin++;
  43. end++;
  44. }
  45. else if (*end == ' ' || *end == '\0')
  46. {
  47. //如果这里是用reverse(begin, end--)
  48. //那么我们用' '和前面的指针替换,有问题。
  49. reverse(begin, --end);
  50. begin = ++end;
  51. }
  52. else
  53. {
  54. ++end;
  55. }
  56. }
  57. return str;
  58. }
  59. int main()
  60. {
  61. char a[] = "chenyu word hello";
  62. char *result = NULL;
  63. result = reverseNumeber(a);
  64. if (NULL == result)
  65. {
  66. printf("result is NULL\n");
  67. }
  68. else
  69. {
  70. printf("%s\n", result);
  71. }
  72. return 0;
  73. }

 

 

 

 

 

4 运行结果

hello word chenyu
 

 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/98603377

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。