【蓝桥杯】删除字符 附erase()函数的用法

文章介绍了C++中string对象的erase()函数如何删除字符串中的字符,提供了三种不同的使用示例。此外,还讨论了一个编程问题,即如何删除单词中的某些字符以得到字典序最小的单词,解决方案是删除前面字符大于后面字符的元素。

erase()函数的用法

str.erase(str.begin() + 3);//删除str.begin()开始元素的后面的第三位;
str.erase(str.begin(),str.end());//删除str的开始元素至结束元素
str.erase(0,6);//删除从第0位开始,长度为6的字符串;

#include<iostream>
using namespace std;
int main()
{
	string str1 = "change situation";
	string str2 = "change situation";
	string str3 = "change situation";
	
	str1.erase(str1.begin() + 3);//删除str1.begin()开始元素的后面的第三位,即n; 
	str2.erase(str2.begin(),str2.end());//删除str2的开始元素至结束元素 ;
	str3.erase(0,6);//删除从第0位开始,长度为6的字符串,即剩下的包含空格 situation; 
	
	cout << "字符串1为:" << str1 << endl;
	cout << "字符串2为:" << str2 << endl;
	cout << "字符串3为:" << str3 << endl;
	return 0;
 } 

在这里插入图片描述

删除字符

题目描述:

给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?

输入输出样例:

输入:

LANQTAO
3

输出:

AIAO

思路:

删除t个字符使得字符的字典序最小。 把前面字符比后面字符大的字符删掉,如果我们把这个机会让给别的字符,由于靠前面的有更大的字符,字符串又是相同长度的,这样字符串的字典序会增加,所以把前面字符比后面字符大的删掉,整体的字符串的字典序就是最小的。

代码实现:

#include <iostream>
#include<string>
using namespace std;
int main()
{
  // 请在此输入您的代码
  string str;
  int t;
  cin >> str >> t;
  while(t--){
    for(int i = 0;i < str.length();i++)
    {
      if(str[i] > str[i+1]){
        str.erase(i,1);//删除第i个字符
        break;
      }
    }
  }
  cout << str <<endl;
  return 0;
}
### C++ 字符串处理函数 对于C++中的字符串操作,`<cstring>` 和 `<string>` 头文件提供了丰富的功能来处理字符数组和 `std::string` 类型。下面列举一些常用的字符串处理函数: #### 基本转换函数 - **tolower()**: 将单个大写字母转换成对应的小写字母;如果不是大写字母,则保持不变[^1]。 - **toupper()**: 把一个小写字母变成相应的大写字母;如果参数不是小写字母则返回原值。 ```cpp #include <iostream> #include <cctype> // 包含 tolower, toupper 函数声明 using namespace std; int main(){ char ch = 'A'; cout << "Original character: " << ch << endl; cout << "Lowercase conversion: " << static_cast<char>(tolower(ch)) << endl; } ``` #### 字符串类成员方法 除了上述针对单一字符的操作外,`std::string` 还提供了一系列用于整个字符串的方法: - **append(str)** 或者 **+= str** : 向现有字符串追加另一个字符串的内容; - **substr(pos, len)** :提取子串,从位置 pos 开始复制长度为 len 的部分; - **find(sub, start_pos=0)** :寻找指定子串首次出现的位置,默认从头开始搜索; - **replace(start_pos, num_chars_to_replace, new_str)** :替换某一段文字为新的内容; - **erase(position, length)** :删除特定范围内的字符; - **insert(index, text)** :在给定索引处插入新文本。 #### 遍历并修改每个字符的例子 当需要逐字改变大小写时可以遍历每一个元素,并应用相应的变换规则: ```cpp #include <iostream> #include <algorithm> // for transform() #include <cctype> // for isupper(), tolower() void changeCase(string& s){ transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return isupper(c)? tolower(c): toupper(c); }); } int main(){ string inputStr = "AbCdEfG"; changeCase(inputStr); cout << inputStr << endl; // 输出 aBcDeFg } ``` 此代码片段展示了如何利用标准库算法 `transform()` 来简化对容器内所有元素执行相同操作的过程。这里通过 lambda 表达式实现了大小写的互换逻辑。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柴妮贝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值