翻转单词顺序

来源:互联网 发布:b2b 建站 教程 编辑:程序博客网 时间:2024/05/16 08:05

前言

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。例如输入字符“student. a am I”,输出为"I am a student.".这个题目很常见,据说很多公司都多次拿来作面试题目。这里主要是因为网上很多相关代码都是照抄何海涛的《剑指offer》,c++风格的代码无法接受,所以这里贴出我的ac代码

思路

这个题目的思路比较简单,分两步即可:
  1. 翻转句子中所有的字符,例如翻转“student. a am I”中所有的字符得到“I ma a .tneduts”,此时不但翻转了句子中的单词的顺序,连单词内的字符顺序也被翻转了
  2. 再翻转每个单词中字符的顺序,就得到“I am a students.”了

字符串翻转的代码实现很简单,我贴出我写的c代码:

void reverse_word(char *str, int begin, int end){char temp;while (begin < end) {temp = *(str + begin);*(str + begin) = *(str + end);*(str + end) = temp;begin ++;end --;}}


示例

题目描述:JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?输入:每个测试案例为一行,表示一句英文句子。我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有很多空格。为了方便起见,你可以认为一行的字符总数不会超过50000个,标点符号可以和普通字母一样处理。输出:对应每个测试案例,把翻转后的正确的句子单独输出一行。样例输入:student. a am II'm a Freshman and I like JOBDU!样例输出:I am a student.JOBDU! like I and Freshman a I'm

ac代码

#include <stdio.h>#include <string.h> void reverse_word(char *str, int begin, int end); int main(void){    int st, ed, len;    char str[50001];     while (gets(str)) {        len = strlen(str);        reverse_word(str, 0, len - 1);         for (st = ed = 0; ed < len;) {            while (*(str + ed) != ' ' && *(str + ed) != '\0') {                ed ++;            }            reverse_word(str, st, ed - 1);                         st = ed;             while (*(str + st) == ' ') {                st ++;            }            ed = st;        }         puts(str);    }     return 0;} void reverse_word(char *str, int begin, int end){    char temp;     while (begin < end) {        temp = *(str + begin);        *(str + begin) = *(str + end);        *(str + end) = temp;        begin ++;        end --;    }   }/**************************************************************    Problem: 1361    User: wangzhengyi    Language: C    Result: Accepted    Time:50 ms    Memory:912 kb****************************************************************/


原创粉丝点击