【leetcode】 Reverse Words in a String

字符串操作,包括查找,字串等函数;

用vector存储每个单词;

注意:1.string类型对象,不能通过修改中间某个字符为'\0'达到修改字符串大小;而char s[],可以通过类似修改,达到用printf 或cout 输出部分字符;

2.反向迭代器的使用;


#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Solution {
public:
    void reverseWords(string &s) {
        string retStr="";
        string nullstr = " ";
        vector<string> strvec;
        for(int i=0 ; i<s.length() ; i++){
            string tempStr;
            int j = i;
            while(s[j] != ' ' && s[j]!='\0'){
                j++;
            }
            tempStr=s.substr(i,j-i);
            i = j;

            
            if(tempStr.length() != 0){  //!!没有单词时不需要存储
                strvec.push_back(tempStr);
            }

        }
        //!!反向迭代器
        for(vector<string>::reverse_iterator it=strvec.rbegin() ; it != strvec.rend() ; it++){
            retStr.append(*it);
            retStr.append(nullstr);
        }
        s = retStr.substr(0,retStr.length()-1);
    }
};


int main()
{

    string  s = "a";
//    string s = "  ";
//    cout << s << endl;

    Solution A;
    A.reverseWords(s);

    cout << s  << " " << s.length() << endl;

//    string s = "hello";
//    cout << s << endl;
//    s[2] = '\0';
//    cout << s << endl;
//
//    char s[] = "hello";
//    cout << s << endl;
//    s[2] = '\0';
//    cout << s << endl;
    return 0;
}
不用vector代码:

class Solution {
public:
    void reverseWords(string &s) {
        string retStr="";
        string nullstr = " ";
        vector<string> strvec;
        for(int i=0 ; i<s.length() ; i++){
            string tempStr;
            int j = i;
            while(s[j] != ' ' && s[j]!='\0'){
                j++;
            }
            tempStr=s.substr(i,j-i);
            i = j;
            if(tempStr.length() != 0){
                string s1 = " ";
                tempStr.append(s1);
                tempStr.append(retStr);
                retStr = tempStr;
            }
        }
        s = retStr.substr(0,retStr.length()-1);
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值