zoukankan      html  css  js  c++  java
  • 【剑指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上的代码,还是有差距啊!

    比着书上的代码,感觉自己写的代码真是弱爆了,一点都不简洁。姑且贴上吧,一点点进步,日后回来再做个对照。


  • 相关阅读:
    浅谈ajax
    textsizeadjust属性
    vue通信
    json、jsonp的定义和区别
    js中的eval()和catch()
    WebRTC之Android客户端
    人工神经网络(从原理到代码) Step 01 感知器 梯度下降
    简单实用的matlab柱状图显示比例及计数
    JAVA 常用包
    设置MySQL允许远程连接
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6788820.html
Copyright © 2011-2022 走看看