【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
题目分析:
解法一、翻转2次字符串,(1)先翻转整个字符串 (2)在翻转句子中的单词
解法二、倒序拷贝,从字符串末尾开始,以单词为单位,顺序拷贝到另外一块内存当中,并顺序排放
算法实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *rev_str_word(char *str)
{
char *start = str;
char *end = str + strlen(str);
char *space = end;
char *re = strdup(str);
char *temp = re;
/*@space point to last space*/
while((space = strrchr(str, ' ')) != NULL)
{
int len = end-space;
memcpy(re, space, len);
re += len;
end = space;
*space = '\0';
}
/*copy last str*/
if(strlen(start) != 0)
{
*re = ' ';
memcpy(++re, start, strlen(start));
}
return temp;
}
int main(int argc, char *argv[])
{
char *str = rev_str_word(argv[1]);
printf("%s-->%s\n", argv[1], str);
free(str);
return 0; }
本文介绍了一种算法,用于翻转英文句子中单词的顺序,同时保持单词内部字符顺序不变。提供了两种方法:一是通过两次翻转字符串实现;二是采用倒序拷贝的方式。并给出了具体的C语言实现代码。
1343

被折叠的 条评论
为什么被折叠?



