问题:句子逆序

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

给定一个原字符串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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容