所以..很抱歉我重复发布了。我真的不知道这个网站是如何运作的。不过,我在这里改变了我的整个问题,以便更容易理解。这是:
char s[1002];
cin.getline(s, 1002, '\n');
int k;
int p = strlen(s);
strcat(s, " ");
for (int i = 0; i <= p; i++)
{
if (s[i] == ' ')
{
for (k = i - 1; (k != -1) && (s[k] != ' '); k--)
cout << s[k];
cout << " ";
}
}
“”、“、”、“。”和 ';'应该是分隔符,但我已经设法将其拉到仅与“”(间隔)一起使用。
我无法使用std::string
因为我正在做作业,我需要做一个非常具体的函数 - char const* reverseWordsOnly(const char*)
.
代码应该做什么?
Input: Reversing the letters, is; really hard.
Output: gnisreveR eht srettel, si; yllaer drah.
最佳答案
虽然我仍然觉得这是重复的,但解决这个问题的思考过程是这样的:
- 编写一个函数,对于字母字符(a-z 和 A-Z)返回 true,否则返回 false。
- 从字符串的开头开始
- 找到下一个字母字符,记下其位置(开始)
- 查找下一个非字母字符,记下其位置(结尾)
- 反转[start, end)范围内的字符
- 重复步骤 3-5,直到字符串末尾
当您使用std::string
时,所有这一切都变得非常容易和类似 std::reverse
的算法而不是使用原始数组和自定义数组。由于您可以使用 std::cin
和std::cout
( <iostream>
),反对使用 <string>
的论点是个愚蠢的人。
关于c++ - 如何反转字符串中的所有单词? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21318892/