字符串中单词的逆转

àì夳堔傛蜴生んèń 2023-08-17 17:30 139阅读 0赞

题目描述:将一个字符串中的单词进行逆转,请注意区分单词的逆转和字符串的逆转。‘

例:已知字符串为“I Love China!”,进行单词的逆转后为“China! Love I”。

思路:先对整个字符串进行逆转,之后再对每个单词进行逆转。

  1. #include <iostream>
  2. using namespace std;
  3. void Reverse(char* a, char* b)
  4. {
  5. if (a == NULL || b == NULL)
  6. return;
  7. while (a < b)
  8. {
  9. char temp = *a;
  10. *a = *b;
  11. *b = temp;
  12. a++, b--;
  13. }
  14. }
  15. char* ReverseSentence(char* str)
  16. {
  17. if (str == NULL)
  18. {
  19. return NULL;
  20. }
  21. char* begin = str;
  22. char* end = str;
  23. while (*end != '\0')
  24. {
  25. end++;
  26. }
  27. end--;
  28. Reverse(begin, end); //反转整个字符串
  29. begin = end = str;
  30. while (*begin != '\0')
  31. {
  32. if (*begin == ' ')
  33. {
  34. begin++;
  35. end++;
  36. continue;
  37. }
  38. //反转单词
  39. else if (*end == ' ' || *end == '\0')
  40. {
  41. Reverse(begin, --end);
  42. begin = ++end;
  43. }
  44. else
  45. end++;
  46. }
  47. return str;
  48. }
  49. int main()
  50. {
  51. char s[100];
  52. gets(s);
  53. cout << ReverseSentence(s) << endl;
  54. return 0;
  55. }

20191001163831527.png

此外,还有一种方法,即直接调用reverse()函数。

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using namespace std;
  5. int main()
  6. {
  7. string str;
  8. getline(cin,str);
  9. reverse(str.begin(), str.end()); //第一步,逆转整体,从begin开始到end前一个
  10. int i = 0, begin = 0;
  11. for (i = 0; i <= str.size(); i++) //如果第一个单词有很多个字母,那么如果不写<=的话会导致第一个单词在其内部被逆转,即如果第一个单词是She,而且还没有写<=,那么该单词就会以ehS的形式输出
  12. {
  13. if ((str[i] == ' ' || str[i] == '\0') && begin < i) //遇到空格或结束符,同时判断begin小于i,就是存在可逆转的单词
  14. {
  15. reverse(str.begin() + begin, str.begin() + i);
  16. begin = i + 1;
  17. }
  18. }
  19. cout << str << endl;
  20. return 0;
  21. }

20191001170712625.png

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读

    相关 翻转字符串单词

    [题目:给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠

    相关 字符串单词

    统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。 请注意,你可以假定字符串里不包括任何不可打印的字符。 示例:         输入: "Hello, my

    相关 字符串逆转方法

    字符串逆转,就是将一个字符串头尾倒置,变成一个新的字符串 如:abcdefg -> gfedcba bbcaa -> aacbb 逆转字符串可以在线性时间内完成,所需时间