• 【剑指offer】翻转单词顺序


    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033

    题目描写叙述:
    JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看。但却读不懂它的意思。比如,“student. a am I”。后来才意识到。这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。

    Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

    输入:
    每一个測试案例为一行,表示一句英文句子。

    我们保证一个句子的单词数不会超过600。每一个单词的长度也不会超过30。可是须要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有非常多空格。为了方便起见,你能够觉得一行的字符总数不会超过50000个,标点符号能够和普通字母一样处理。
    输出:
    相应每一个測试案例。把翻转后的正确的句子单独输出一行。

    例子输入:
    student. a am I
    I'm a Freshman and I like JOBDU!
    例子输出:
    I am a student.
    JOBDU! like I and Freshman a I'm
        先翻转整个字符串。再翻转每一个单词。

        代码例如以下:

    #include<stdio.h>
    
    void Swap(char *a,char *b)
    {
    	char temp = *a;
    	*a = *b;
    	*b = temp;
    }
    
    /*
    反转字符串
    */
    void Reverse(char *str,char *begin,char *end)
    {
    	if(str==NULL || begin==NULL || end==NULL)
    		return;
    
    	while(begin < end)
    	{
    		Swap(begin,end);
    		begin++;
    		end--;
    	}
    }
    
    /*
    反转单词顺序
    */
    void ReverseSentence(char *str)
    {
    	if(str == NULL)
    		return;
    
    	char *begin = str;
    	char *end = str;
    	while(*end != '')
    		end++;
    	end--;
    	//反转整个字符串
    	Reverse(str,begin,end);
    
    	//反转每一个单词
    	begin = str;
    	while(*begin == ' ')
    		begin++;
    	end = begin;
    	while(*begin != '')
    	{
    		while(*end!=' ' && *end!='')
    			end++;
    		end--;
    		Reverse(str,begin,end);
    
    		//跳过多个空格
    		end++;
    		while(*end == ' ')
    			end++;
    		begin = end;
    	}
    }
    
    int main()
    {
    	char str[50000];
    	while(gets(str) != NULL)
    	{
    		ReverseSentence(str);
    		puts(str);
    	}
    	return 0;
    }
    /**************************************************************
        Problem: 1361
        User: mmc_maodun
        Language: C
        Result: Accepted
        Time:50 ms
        Memory:912 kb
    ****************************************************************/
        对照了下剑指offer上的代码,还是有差距啊!比着书上的代码,感觉自己写的代码真是弱爆了,一点都不简洁。

    姑且贴上吧,一点点进步。日后回来再做个对照!


  • 相关阅读:
    生日蜡烛
    生日蜡烛
    Angular2 and Electron
    NW.js and Electron compared
    Github发布了为桌面应用开发而生的Electron 1.0版本(HTML、CSS和JavaScript)
    哈佛——教育
    国家的强大——小学教师
    (OK)(OK) Fedora23——NS3(MANETs)——Docker(busybox)——genymotion(android)——All is OK
    (OK) ns3—genymotion—android
    android——adb shell——netcfg——get IP address
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6916757.html
Copyright © 2020-2023  润新知