代码随想录算法训练营第8天 |344. 反转字符串、541. 反转字符串、54. 替换数字、55. 右旋字符串

复习字符串相关操作

下面是一些示例代码,演示了如何在C++中使用std::string类中的一些常用字符串操作函数:

#include <iostream>
#include <string>

int main() {
    // 构造函数示例
    std::string str1; // 创建空字符串
    std::string str2 = "Hello"; // 复制构造函数
    std::string str3(str2, 1, 3); // 从另一个字符串中构造子字符串

    // 赋值函数示例
    std::string assignedStr;
    assignedStr = "World"; // 使用赋值运算符
    std::string str4 = "Hello";
    str4.assign("Universe"); // 使用assign函数

    // 拼接函数示例
    std::string str5 = "Hello";
    std::string str6 = " World";
    str5.append(str6); // 使用append函数
    str5 += "!"; // 使用+=运算符

    // 插入函数示例
    std::string str7 = "Hello!";
    str7.insert(5, " World");

    // 删除函数示例
    std::string str8 = "Hello, World!";
    str8.erase(7, 6); // 从索引位置7开始删除长度为6的子字符串

    // 替换函数示例
    std::string str9 = "Hello, World!";
    str9.replace(7, 5, "Universe"); // 替换索引位置7开始长度为5的子字符串为"Universe"

    // 查找函数示例
    std::string str10 = "Hello, World!";
    size_t found = str10.find("World");
    if (found != std::string::npos) {
        std::cout << "Substring found at index: " << found << std::endl;
    } else {
        std::cout << "Substring not found" << std::endl;
    }

    // 子字符串示例
    std::string str11 = "Hello, World!";
    std::string subStr = str11.substr(7, 5); // 获取索引位置7开始长度为5的子字符串

    // 比较函数示例
    std::string str12 = "Hello";
    std::string str13 = "HELLO";
    int result = str12.compare(str13);
    if (result == 0) {
        std::cout << "Strings are equal" << std::endl;
    } else if (result < 0) {
        std::cout << "str12 is less than str13" << std::endl;
    } else {
        std::cout << "str12 is greater than str13" << std::endl;
    }

    // 修改大小函数示例
    std::string str14 = "Hello";
    str14.resize(10, '!'); // 改变字符串的长度为10,多余的部分用'!'填充

    // 访问单个字符示例
    std::string str15 = "Hello";
    char firstChar = str15[0]; // 访问第一个字符
    char lastChar = str15[str15.size() - 1]; // 访问最后一个字符

    return 0;
}

1. 构造函数:

#include <iostream>
#include <string>

int main() {
    // 创建空字符串
    std::string str1;

    // 复制构造函数
    std::string str2 = "Hello";

    // 从另一个字符串中构造子字符串
    std::string str3(str2, 1, 3); // 从索引位置1开始,长度为3的子字符串

    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    std::cout << "str3: " << str3 << std::endl;

    return 0;
}

2. 赋值函数:

// 赋值运算符
std::string str = "Hello";
std::string newStr;
newStr = str;

// assign函数
std::string assignedStr;
assignedStr.assign("World");

std::cout << "newStr: " << newStr << std::endl;
std::cout << "assignedStr: " << assignedStr << std::endl;

3. 拼接函数:

std::string str1 = "Hello";
std::string str2 = " World";
str1.append(str2);

// 或者使用+=运算符
str1 += "!";

4. 插入函数:

std::string str = "Hello!";
str.insert(5, " World");

std::cout << "Inserted String: " << str << std::endl;

5. 删除函数:

std::string str = "Hello, World!";
str.erase(7, 6); // 从索引位置7开始删除6个字符(包括空格)

std::cout << "Modified String: " << str << std::endl;

6. 替换函数:

std::string str = "Hello, World!";
str.replace(7, 5, "Universe"); // 从索引位置7开始替换长度为5的子字符串为"Universe"

std::cout << "Replaced String: " << str << std::endl;

7. 查找函数:

std::string str = "Hello, World!";
size_t found = str.find("World"); // 查找子字符串"World"在字符串中的位置

if (found != std::string::npos) {
    std::cout << "Substring found at index: " << found << std::endl;
} else {
    std::cout << "Substring not found" << std::endl;
}

8. 比较函数:

std::string str1 = "Hello";
std::string str2 = "HELLO";

int result = str1.compare(str2);

if (result == 0) {
    std::cout << "Strings are equal" << std::endl;
} else if (result < 0) {
    std::cout << "str1 is less than str2" << std::endl;
} else {
    std::cout << "str1 is greater than str2" << std::endl;
}

以下是更多关于C++中字符串操作函数的示例代码:

9. 修改大小函数:

std::string str = "Hello";
std::cout << "Original Size: " << str.size() << std::endl;

// 改变字符串的长度为10,多余的部分用'!'填充
str.resize(10, '!');

std::cout << "Resized String: " << str << std::endl;
std::cout << "New Size: " << str.size() << std::endl;

10. 访问单个字符:

std::string str = "Hello";
char firstChar = str[0]; // 访问第一个字符
char lastChar = str[str.size() - 1]; // 访问最后一个字符

std::cout << "First Character: " << firstChar << std::endl;
std::cout << "Last Character: " << lastChar << std::endl;

344. 反转字符串

Problem: 344. 反转字符串

1.思路

翻转字符,交换 l/2次即可

2.Code

class Solution {
public:
    void reverseString(vector<char>& s) {
        int l = s.size();
        for(int i = 0; i < l/2; i++){
            int tmp = s[i];
            s[i] = s[l-i-1];
            s[l-i-1] = tmp;
        }
    }
};

541. 反转字符串 II

Problem: 541. 反转字符串 II

1.思路

一开始不想用reverse,花了一些时间

2.Code

不用计数器,i直接跳着加

class Solution {
public:
    string reverseStr(string s, int k) {
        //
        int l = s.size();
        for(int i = 0; i < s.size(); i += 2 * k ){
            //下面这条写的就会报错,会报错没有min函数之类的错误
            //reverse(s.begin() + i, s.begin() + min(i + k, s.size()));
            reverse(s.begin() + i, s.begin() + min(i + k, l));
        }

        return s;
    }
};

54. 替换数字(第八期模拟笔试)

  • 时间限制:1.000S 空间限制:128MB
  • 题目描述
    给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
  • 输入描述
    输入一个字符串 s,s 仅包含小写字母和数字字符。
  • 输出描述
    打印一个新的字符串,其中每个数字字符都被替换为了number
  • 输入示例
    a1b2c3
  • 输出示例
    anumberbnumbercnumber
  • 提示信息
    数据范围:
    1 <= s.length < 10000。

1.思路

方法一:使用额外的辅助空间
方法二:使用双指针指针从后往前操作:大多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

2.Code

方法一

#include<iostream>
using namespace std;
int main(){
    string s, new_s = "";
    cin >> s;
    for(int i = 0; i < s.size(); i++){
        if(s[i] >= '0' && s[i] <= '9'){
            new_s += "number";
        }else new_s += s[i];
    }
    cout << new_s << endl;
}

55. 右旋字符串(第八期模拟笔试)

  • 时间限制:1.000S 空间限制:128MB
  • 题目描述
    字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

例如,对于输入字符串 “abcdefg” 和整数 2,函数应该将其转换为 “fgabcde”。

  • 输入描述
    输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。
  • 输出描述
    输出共一行,为进行了右旋转操作后的字符串。
  • 输入示例
    2
    abcdefg
  • 输出示例
    fgabcde
  • 提示信息
    数据范围:
    1 <= k < 10000,
    1 <= s.length < 10000;

1.思路

方法一:使用额外的辅助空间,字符处理

2.Code

方法一

#include<iostream>
using namespace std;
int main(){
    string s, new_s = "";
    cin >> s;
    for(int i = 0; i < s.size(); i++){
        if(s[i] >= '0' && s[i] <= '9'){
            new_s += "number";
        }else new_s += s[i];
    }
    cout << new_s << endl;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值