翻转字符串中单词的顺序(腾讯面试)

例如:输入“i come from tianjin”,输出“tianjin. from come i”

step1:翻转所有字母的顺序,变成“.nijnait morf emoc i”

step2:翻转单词,以空格为界,输出正确答案

java代码:

//最新的。翻转句子。通过测试。by myself
//I am a student. --> student. a am I
public class ReverseSentence{
  public static void main(String[] args){
        String s="zhangxueyuan am   student";
        System.out.println(s);
        System.out.println(reverseSentence(s));
    }
    public static void reverse(char c[], int start, int end){
        while(start<end){
            char temp = c[start];
            c[start] = c[end];
            c[end] = temp;
            start++;
            end--;
        }
    }
    public static char[] reverseSentence(String s){
        char c[]=s.toCharArray();
        reverse(c, 0, c.length-1);//c[c.length-1]!='\0'
        int start = 0;
        int end = 0;
        while(end<=c.length-1){
            if(c[start]==' '){
                start++;
                end=start;
            }else if(c[end]==' '){
                reverse(c, start, end-1);
                end++;
                start=end;
            }else{
                end++;
            }
        }
        //注意最后一个单词后面可能没有空格!所以需要下面一句来处理
        if(start!=end&&start<end-1){
            reverse(c, start, end-1);
        }
        return c;
    }
}

 

c代码:

#include <iostream>
#include <stdio.h>
using namespace std;
void reverse(char *pBegin, char *pEnd)
    //翻转字符串
{
    if(pBegin==NULL||pEnd==NULL)
    {
        return;
    }
    char temp;
    while(pBegin<pEnd)
    {
        temp=*pBegin;
        *pBegin=*pEnd;
        *pEnd=temp;

        pBegin++;
        pEnd--;
    }
}//reverse

char* reverseSentence(char *pData)
{
    if(pData==NULL)
    {
        return NULL;
    }
    char *pBegin=pData;
    char *pEnd=pData;

    while((*pEnd)!='\0')
    {
        pEnd++;
    }
    pEnd--;

    reverse(pBegin,pEnd);//翻转所有
    pBegin=pEnd=pData;
    /*
    //翻转每个单词法一(书中)        
    while(*pBegin!='\0')
    {
        if(*pBegin==' ')
        {
            pBegin++;
            pEnd++;
        }
        else if(*pEnd==' '||*pEnd=='\0')
        {
            reverse(pBegin,--pEnd);
            pBegin=++pEnd;    
        }
        else
        {
            pEnd++;
        }
    }
    */
    //翻转每个单词法二(自己写的)
    while((*pEnd)!='\0')
    {
        if(*pEnd==' ')
        {
            pBegin=++pEnd;
        }
        else
        {
            while((*pEnd)!=' '&&(*pEnd)!='\0')
            {
                pEnd++;
            }
            reverse(pBegin,pEnd-1);
        }
    }

    return pData;
}//reverseSentence

int main(){
    char s[]="i come from tianjin";
    cout<<s<<endl;
    char *p=reverseSentence(s);
    cout<<p<<endl;
}

 

 

 

posted @ 2014-04-16 16:35  seven7seven  阅读(581)  评论(0编辑  收藏  举报