给定一个字符串,逐个翻转字符串中的每个单词。
说明
- 单词的构成:无空格字母构成一个单词
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
方法1:从后往前依次遍历源字符串src,每次遍历完一个单词后,直接将该单词整个拷贝到另一个字符串dst中,依次遍历原字符串,分别将每个独立的单词拷贝到dst中。
在拷贝字符串是先判断该字符串是否全是空格如果是则不拷贝。
实现:
class Solution { public: /* * @param s: A string * @return: A string */ void *reverse(char *src, char *dst) { char *p1, *p2; if(src == NULL || dst == NULL) { return NULL; } //从src的最后一个字符开始遍历 p1 = src + strlen(src) - 1; p2 = p1; while (p1 != src) { if (*p1 == ' ') { int len = p2 - p1;//单词的长度 memcpy(dst, p1 + 1, len); //每个单词的末尾加上一个空格 dst += len; if(len>0) *dst++ = ' '; p1--; p2 = p1; } else { //不断将p1向前移动 p1--; } } //最后一次拷贝单词 int len = p2 - p1 + 1; memcpy(dst, p1, len); dst += len; *dst++ ='