首页 > 代码库 > 翻转句子中单词的顺序
翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。比如输入"I love you.",输出"you. love I"。
解题思路:
我们可以先翻转整个字符串,然后再翻转字符串中的每个单词。比如"I love you."翻转整个字符串后得到".uoy evol I",再翻转字符串中的每一个单词得到"you. love I"。当然也可以先翻转字符串中的每个单词,翻转整个字符串。注意多个空格连续时还是当成一个分隔符,比如" I love you. "翻转句子后变成" you. love I "。
解题思路:
我们可以先翻转整个字符串,然后再翻转字符串中的每个单词。比如"I love you."翻转整个字符串后得到".uoy evol I",再翻转字符串中的每一个单词得到"you. love I"。当然也可以先翻转字符串中的每个单词,翻转整个字符串。注意多个空格连续时还是当成一个分隔符,比如" I love you. "翻转句子后变成" you. love I "。
算法实现:
void reverseSentence(char str[]) { if(str==NULL||str[0]=='\0') return;//字符串为空或为空串时,直接返回 reverseStr(str); int n=0; int start=0; char temp; while(str[n]!='\0') { while(str[n]==' ') //当多个' '连着时,还是将它们看成一个分割符 { n++; } start=n; while(str[n]!=' '&&str[n]!='\0') { n++; } temp=str[n];//保存翻转单词的后一个字符,在这里是' '字符或'\0'结束符 str[n]='\0'; reverseStr(str+start); str[n]=temp;//恢复翻转单词的后一个字符 if(str[n]=='\0') break;//跳出循环 n++; } }
reverseStr()方法我的一篇博文有它的具体实现:字符串翻转
PS:这里翻转单词时,可以通过在翻转字符串的基础上,另外再传递一个结束指针实现,很多人都是这样实现的。但是我前面已经写了一个翻转字符串的方法,不想再改这个方法,让它接受两个参数的传递,所以我用了一个辅助字符,当要翻转单词时,我保存翻转单词的后一个字符,然后令翻转单词的后一个字符为‘\0‘,翻转完该单词后就恢复翻转单词的后一个字符。
翻转句子中单词的顺序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。