您的位置:首页 > 职场人生

面试题42:翻转单词顺序(句子反转)

2017-12-06 16:50 281 查看
题目:给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”

思路:

第一步:翻转句子中所有的字符。比如翻转“hello xiao mi”,变成“im oaix olleh”

第二步:再翻转每个单词的顺序,就变成了“mi xiao hello”

这种思路的关键在于翻转一段子字符串。

void ReverseWord(char* begin, char* end)
{
if(begin == NULL || end == NULL)
{
return;
}

char tmp;
while(begin < end)
{
tmp = *begin;
*begin = *end;
*end = tmp;
begin++;
end--;
}
}


翻转句子的函数为:

void ReverseSentence(char* sentence)
{
int size = (int)strlen(sentence);
ReverseWord(sentence, sentence+size-1);//最后一位是'\0',无需处理
int start = 0, i = 0;
while(i <= size)
{
if(sentence[i] == ' ' || sentence[i] == '\0')
{
int sub_size = i-start;
if(sub_size > 0)
{
ReverseWord(sentence + start, sentence + start + sub_size - 1);
start = i+1;
}
}
i++;
}
}


主函数:

int main()
{
while(true)
{
char str[1000];
char* sentence = gets(str);

ReverseSentence(sentence);
printf("%s\n", sentence);
}

return 0;
}


以上方法,直接就在原来的字符串上操作,无需额外空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: