字符串反序
根据输入的字符串, 遇到空格或者到字符串末尾, 都要进行反转. 即只进行单词之内的反转.
例如 This is a MacBook -> sihT si a koobcam.
要去: 时间复杂度 On
当时面试的时候, 一脸懵逼, 所以题目做的一塌糊涂. 现在又到了要找工作的时间段了, 再看到这个题, 突然有了眉目.
解题思路:
循环遍历输入的字符串, 在遇到空格或者字符串结尾时, 对刚才遍历的单词反向写入输出字符串. 在循环没有到输入字符串末尾时, 每个单词反向写入之后添加空格.
具体的代码:
- bool reverse(const char* input, char* output)
- {
- if (nullptr == input || nullptr == output)
- {
- return false;
- }
- char sep = ' ';
- size_t index = 0;
- size_t size = strlen(input);
- for (size_t i = 0; i <size; ++i)
- {
- // 遇到空格或者字符串末尾, 才会进行下一步的反转字符串
- if (input[i] != sep && i != size - 1)
- {
- continue;
- }
- // 遇到空格, 从空格前一个字符开始反向遍历
- // 到字符串末尾, 从当前位置开始反向遍历
- // 反向遍历的终止是到字符串开始或者遇到空格, 这个 for 循环的下表 j 的类型不能是 size_t
- for (int j = (i == size - 1) ? i : i - 1; (j>= 0) && input[j] != sep; --j)
- {
- output[index++] = input[j];
- }
- // 不是字符串末尾时, 要在输出字符串末尾添加空格
- if (i != size - 1)
- {
- output[index++] = sep;
- }
- }
- return true;
- }
注意??: 使用这个函数, 输出字符串的长度需要自己定, 要保证的是输出字符串的长度大于等于输入字符串的长度.
来源: http://www.bubuko.com/infodetail-2974286.html