• 转置字符串,其中单词内的字符需要正常


    如题:转置一个字符串,需要其中的单词正常

    例如:

    Given s = "the sky is blue",
    return "blue is sky the".

    需要说明的是:

    1、输入字符串可能会出现:前导空格,后置空格,要求输出的不能有前导空格和后置空格。

    2、输入的语句中可能有两个单词之间出现多个空格,输出两个单词之间只能由一个空格。

    #include <iostream>
    #include <string>
    using namespace std;
    
    void reverse(string &s,int start,int end)
    {
        while (start<end)
        {
            char tem = s[start];
            s[start] = s[end];
            s[end] = tem;
            start++;
            end--;
        }
    }
    
    void reverseString(string &s)
    {
        if (s.empty()||s.length()==0)
        {
            return;
        }
        //去除前置和后置空格
        int num1 = s.find_first_not_of(" ");
        if (num1 == -1){
            s = "";
            return;
        }
        int num2 = s.find_last_not_of(" ");
        s = s.substr(num1,num2-num1+1);
    
        int start = 0,end = 0;
        int size = s.length();
        end = size-1;
        //整个字符串倒置
        reverse(s,start,end);
        //两个单词之间有多个空格的情况
        int count = 0;
        for (int i = 0; i < size; i++)
        {
            if(s[i] ==  ' ' && s[i+1] == ' ')continue;
            s[count++]=s[i];            
        }
        if(count<size)s = s.substr(0,count);
        size = s.size();
        start = 0;
        end = -2;
        //其中每个单词倒置
        for (int i = 0; i < size; i++)
        {
            if(s[i] == ' ')
            {
                start = end+2;
                end = i-1;
                reverse(s,start,end);
            }
            if(i == size-1){
                start = end+2;
                end = i;
                reverse(s,start,end);
            }
        }
    }
    
    int main(int argc, char **argv)
    {
        
        string s = "   a   b ";
        cout<<"before reverse: "<<s<<endl;
        reverseString(s);
        cout<<"after reverse: "<<s<<endl;
    
        return 0;
    }
  • 相关阅读:
    zoj 3195 Design the city LCA Tarjan
    hdu 2586 How far away ? 离线LCA
    洛谷 P3379 【模板】最近公共祖先(LCA)Tarjan离线
    codeforces #446 892A Greed 892B Wrath 892C Pride 891B Gluttony
    设计模式(16)---原型模式
    设计模式(15)---享元模式
    设计模式(14)---组合模式
    设计模式(13)---外观模式
    设计模式(12)---适配器模式
    设计模式(11)---代理模式
  • 原文地址:https://www.cnblogs.com/newpanderking/p/3949338.html
Copyright © 2020-2023  润新知