第五章 字符串

本文介绍了两个C++程序,分别实现字符串的全局反转和单词级别的反转,包括reverse_string1和reverse_string2函数以及rever_string函数,展示了在主函数中如何调用这些函数处理输入字符串。
摘要由CSDN通过智能技术生成

01反转字符串

//2024.2.6
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

void reverse_string1(string::iterator begin, string::iterator end){
    end--;
    while(begin < end){
        swap(*begin, *end);
        begin++;
        end--;
    }
}

string reverse_string2(string& s, int k){
    for(int i = 0; i < s.size(); i += (2 * k)){
        if(i + k <= s.size()){
            reverse_string1(s.begin() + i, s.begin() + i + k);
            continue;
        }
        reverse_string1(s.begin() + i, s.begin() + s.size());
    }
    return s;
}

int main(){
    string s = "mlnvshdhfjhg";
    reverse_string2(s, 4);
    cout << s << endl;
}

02反转字符串里的单词

//2024.2.6
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

//去除多余空格
string remove_space(string& s){
    int slow = 0, fast = 0;
    //去除前面的空格
    while(s.size() > 0 && fast < s.size() && s[fast] == ' '){
        fast++;
    }
    //去除中间的空格
    for(;fast < s.size(); fast++){
        if(fast - 1 > 0 && s[fast] == s[fast - 1] && s[fast] == ' '){
            continue;
        }else{
            s[slow++] = s[fast];
        } 
    }

    if(s[slow - 1] == ' ' && slow - 1 > 0){
        s.resize(slow - 1);
    }else{
        s.resize(slow);
    }

    return s;
}

string rever_string(string& s){
    remove_space(s);
    reverse(s.begin(), s.end());

    int start = 0, end = 0;
    bool entry = false;
    for(int i = 0; i < s.size(); i++){
        if((!entry) || (s[i] != ' ' && s[i - 1] == ' ')){
            start = i;
            entry = true;
        }
        if(entry && s[i] == ' ' && s[i - 1] != ' '){
            end = i;
            entry = false;
            reverse(s.begin() + start, s.begin() + end);
        }
        if(entry && (i == (s.size() - 1)) && s[i] != ' '){
            end = i + 1;
            entry = false;
            reverse(s.begin() + start, s.begin() + end);
        }
    }
    return s;
}

int main(){
    string s = " I    am  a  student!  ";
    cout << rever_string(s); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值