剑指offer之翻转单词顺序
【摘要】 1 题目
输入一个英文橘子,翻转句子中的单词顺序,但是单词内字符串的顺序不变,简单起见,标点符号和普通字符字母一样处理,例如输入字符串"I am a student.",则输出"student. a am I"
2 思路
先反转字符串所有,然...
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
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/98603377
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)