美文网首页
问题:句子逆序

问题:句子逆序

作者: 熊白白 | 来源:发表于2017-07-06 11:51 被阅读13次

    对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。

    给定一个原字符串A和他的长度,请返回逆序后的字符串。
    这种问题没有涉及到高级的算法技术,或者巧妙的解题设计。实际上它的解法有很多种。其中一种是:

    1. 利用包含句子的字符串构建ostringstream
    2. 利用>>运算符把各个单词依次填入vector<string>里面
    3. 将vector逆序输出到string内

    这种方法利用了ostringstream按照空格自动划分单词的特性。

    如果只用浅层次的指针工具的话:

    1. 将整个字符串逆序
    2. 将每个单词逆序
    void reverse(char*const P,char*const Q){
            char* p=P,*q=Q;
            while(p<q){ //这种指针两头动的情况,用不等于会出错
                char x=*p;
                *p=*q;
                *q=x;
                p++;
                q--;
            }
        }
        string reverseSentence(string A, int n) {
            if(A.empty())
                return A;
            char* a=&A[0];
            reverse(a,a+n-1);
            //两层循环指定单词的区间
            for(int i=0;i<n;++i){
                if(a[i]!=' '){
                    int j;
                    for(j=i+1;j<n;++j){ 
                        if(a[j]==' ')
                            break;
                    }
                    //要么a[j]==' '要么j==n越界
                    reverse(a+i,a+j-1);
                    i=j-1;//记住外面还有一个i++,下次循环开始的时候i==j
                }
                    
            }
            return A;
        }
    

    相关文章

      网友评论

          本文标题:问题:句子逆序

          本文链接:https://www.haomeiwen.com/subject/uprhhxtx.html