剑指offer之翻转单词顺序

1 题目

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

2 思路

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

3 代码实现

#include <stdio.h>

/*
 * 反转整个字符串
 */
void reverse(char *begin, char *end)
{
if (NULL == begin || NULL == end)
return;
while (begin < end)
{
char temp = *end;
*end = *begin;
*begin = temp;
++begin;
--end;
}
}

/*
 * 反转字符串里面的单词
 */
char* reverseNumeber(char *str)
{
if (NULL == str)
{
return NULL;
}
char *begin = str;
char *end = str;
while (*end != '\0')
{
end++;
}
--end;
//反转整个字符串
reverse(begin, end);
//再反转里面的单词
begin = end = str;
while (*begin != '\0')
{
if (*begin == ' ')
{
begin++;
end++;
}
else if (*end == ' ' || *end == '\0')
{
//如果这里是用reverse(begin, end--)
//那么我们用' '和前面的指针替换,有问题。
reverse(begin, --end);
begin = ++end;
}
else
{
++end;
}
}
return str;
}

int main()
{
char a[] = "chenyu word hello";
char *result = NULL;
result = reverseNumeber(a);
if (NULL == result)
{
printf("result is NULL\n");
}
else
{
printf("%s\n", result);
}
return 0;
}

4 运行结果

hello word chenyu
(0)

相关推荐