STL-string+题目

server/2024/10/21 7:17:37/

STL的六大组件:
在这里插入图片描述
C 库函数 - tolower()
C 标准库 - <ctype.h> C 标准库 - <ctype.h>
描述
C 库函数 int tolower(int c) 把给定的字母转换为小写字母。

C++ 标准库-< cctype >
库函数isalnum()
功能:判断一个字符是否是字母或者(十进制)数字,若为字母或者数字,则返回True(非0值),否者返回False(0)

string
构造,
三种遍历方式:

  1. 下标+[] 也可此方法修改,因为是引用(&)
  2. 迭代器 因为list map不支持[]遍历,因此迭代器是统一的一种方式 [begin(), end() ) begin就是第一个数据,而end返回的是最后一个数据的下一个位置 迭代器也可以改数据
  3. 范围for 依次取容器中的数据赋值给e,自动判断结束。范围for不能修改数据的,想改变得+引用&

push_back只尾插一个字符 ,append尾插一段字符也可以用迭代器描述一段区间插入数据。
+=也就是尾插,+=字符、字符串、对象都可以。
insert 是在任意位置插入也就可以完成头插。
resize(n, ‘x’)给对象中插入n个x数据,如果不给x就会插入0,resize的目标是让size变成20,如果本来就有元素,只会给后面补齐size为20个剩下的x。
reserve() 预留空间,也就是设置capacity的大小。
reverse() 逆置,
c_str()会导致如果遇见\0之后还有数据会输出不了,会返回c类型的字符串的指针。
find 找到第一次出现需要查找的字符的下标,找不见返回-1,也可以设置开始查找的位置。
rfind是从后往前找第一次出现的字符。
substr(pos, len)表示截取字符串从pos位置开始的len长度个字符。不给len就是从pos开始截取到最后 。

// string constructor
#include <iostream>
#include <string>
using namespace std;
int main()
{// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequence"); //A character sequence //from c-string std::string s3(10, 'x'); //xxxxxxxxxx //fill std::string s4(s0); //Initial string //copy std::string s5 = "hello"; //hello //from c-string // 三种遍历方式//1.下标+[] 也可此方法修改,因为是引用(&)for(int i=0; i<s2.size(); ++i){cout << s2[i] << endl;}//2.迭代器 因为list map不支持[]遍历,因此迭代器是统一的一种方式// [begin(), end() ) begin就是第一个数据,而end返回的是最后一个数据的下一个位置,因此不能等于string::iterator it = s2.begin();while(it != s2.end()){cout << *it << " ";it++;)//迭代器也可以改数据it = s0.begin();while(it != s0.end()) // 把*it内容也就是s0的内容全部改成a{*it = a;it++;)// 反向迭代器 rit++的时候是倒着走的,反向输出,从后往前输出string::reverse_iterator rit = s2.rbegin();while(rit != s2.rend()){cout << *rit << " ";rit++;}//3. 范围for 依次取容器中的数据赋值给e,自动判断结束for(auto e : s2) // for(auto& e : s2) 有引用可以修改{cout << e << " ";}//push_back只尾插一个字符  append尾插一段字符,也可以用迭代器描述一段区间插入数据。s2.push_back('g');s2.append("ggg");s2.append(s3.begin(), s3.end()); //也可以用迭代器描述一段区间插入数据。// +=也就是尾插,+=字符、字符串、对象都可以s2 += ' ';s2 += "ggg";s2 += s3;//insert 是在任意位置插入 也就可以完成头插s2.insert(0, "x");s2.insert(0, "tt");// resize()s1.resize(20) // 20个0 size是20s1.resize(20, 'x'); //20个xs5.resize(20, 'x'); // 给s5补齐size为20,用x补齐。s5.resize(5); //让s5只有size为5个,变成hellos//reserves1.reserve(40); //开至少够40个空间的大小//c_strcout << s0 << endl; //调用string::operator<<(cout, s1) 重载函数cout << s0.c_str() << endl; //operator<<(cout, const char*)  //find 找到第一次出现需要查找的字符的下标,找不见返回-1size_t pos = s5.find('l'); //返回2size_t pos = s0.find('t', 8); //找t 但是从第8个位置开始找 找到的就是后面那个t//substr(pos, len)表示截取字符串从pos位置开始的len长度个字符。不给len就是从pos开始截取到最后string suff = s5.substr(pos); //llo//rfind是从后往前找第一次出现的字符size_t rpos = s5.rfind('l');string suff1 = s5.substr(pos); //打印的是lo
}

题目:字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = “leetcode”
输出: 0
示例 2
输入: s = “loveleetcode”
输出: 2
示例 3:
输入: s = “aabb”
输出: -1

class Solution {
public:int firstUniqChar(string s) {int countArr[26] = {0};int i = 0;while(i < s.size()){countArr[s[i] - 'a']++;i++;}int j = 0;while(j < s.size()){if(countArr[s[j] - 'a'] == 1)return j;j++;}return -1;}
};

题目:仅仅反转字母
给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
示例 1:
输入:s = “ab-cd”
输出:“dc-ba”
示例 2:
输入:s = “a-bC-dEf-ghIj”
输出:“j-Ih-gfE-dCba”
示例 3:
输入:s = “Test1ng-Leet=code-Q!”
输出:“Qedo1ct-eeLg=ntse-T!”

bool IsLetter(char c)
{if(c>='a' && c<='z' || c>='A' && c<='Z')return true;elsereturn false;
}
string reverseOnlyLetters(string s) {if(s == "")return s;size_t begin = 0, end = s.size()-1;while(begin < end){while(begin < end && !IsLetter(s[begin]))++begin;while(begin < end && !IsLetter(s[end]))--end;swap(s[begin], s[end]);begin++;end--;}return s;
}

题目:字符串最后一个单词的长度
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
getline(cin, s)是string类中,获取一行的方法,不会被空格断开。

#include <iostream>
#include <string>
using namespace std;
int main() {string s;getline(cin, s);size_t pos = s.rfind(' ');cout << s.size()-(pos+1);return 0;
}

题目:验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = “A man, a plan, a canal: Panama” 输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:
输入:s = “race a car” 输出:false
解释:“raceacar” 不是回文串。
示例 3:输入:s = " " 输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。

bool isPalindrome(string s) {if(s == " ")return true;string s1;string s2;for(int i = 0; i < s.size(); i++){char c = s[i];if(c>='a'&&c<='z' || c>='A'&&c<='Z'){if(c>='A'&&c<='Z'){c += ('a'-'A');}s1 += c;}else if(c>='0'&&c<='9')s1 += c;elsecontinue;}string::reverse_iterator rit2 = s.rbegin();while(rit2 != s.rend()){char c = *rit2;if(c>='a'&&c<='z' || c>='A'&&c<='Z'){if(c>='A'&&c<='Z'){c += ('a'-'A');}s2 += c;}else if(c>='0'&&c<='9')s2 += c;rit2++;}if(s1 == s2)return true;return false;
}

题目:字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = “11”, num2 = “123”
输出:“134”
示例 2:
输入:num1 = “456”, num2 = “77”
输出:“533”
示例 3:
输入:num1 = “0”, num2 = “0”
输出:“0”

string addStrings(string num1, string num2) {int end1 = num1.size()-1, end2 = num2.size()-1;string retstr;int next = 0;while(end1 >= 0 || end2 >= 0){int val1 = 0;if(end1 >= 0){val1 = num1[end1] - '0';end1--;}int val2 = 0;if(end2 >= 0){val2 = num2[end2] - '0';end2--;}int ret = val1+val2+next;if(ret > 9){ret -= 10;next = 1;}elsenext = 0;//retstr.insert(0, 1, (ret + '0')); 每次头插效率太差retstr.insert += (ret+'0');}if(next == 1)//retstr.insert(0, 1, '1');retstr.insert += '1';reverse(retstr.begin(), retstr.end());return retstr;
}

http://www.ppmy.cn/server/133569.html

相关文章

Redis 一些问题

关闭Linux防火墙 找到redis 配置文件 注释 #bind 127.0.0.1 修改 protected-mode yes 改为no 如果报&#xff1a;NOAUTH Authentication required错误就是设置了密码 auth 你的密码 配置Redis spring.redis.host192.168.44.132 spring.redis.port6379 spring.redis.d…

深入解析:Nacos AP 模式的实现原理与应用场景

优质博文&#xff1a;IT-BLOG-CN 一、CAP 基础 ‌Nacos作为注册中心同时支持CP和AP模式。‌ Nacos通过不同的协议和机制来实现这两种模式&#xff0c;以满足不同的需求场景。 在Nacos中&#xff0c;默认情况下使用的是AP模式&#xff0c;通过Distro协议来实现。AP模式主要关…

手写模拟Spring的基本功能

文章目录 1. Spring的基本功能2. 容器启动 容器启动&#xff0c;即创建容器对象并赋予配置对象3. BeanDefinition扫描4. Bean的生命周期5. 单例Bean与多例Bean6. 依赖注入7. AOP8. Aware 回调9. 初始化10. BeanPostProcessor附录&#xff1a; 1. Spring的基本功能 2. 容器启动 …

开发中众多框架的个人理解,Unity设计模式,MVC,MVVM框架

前往个人博客&#xff0c;获取更好的阅读体验 开发中众多框架的个人理解 首先&#xff0c;无论使用什么框架&#xff0c;使用什么设计模式&#xff0c;本质都是为了分离逻辑&#xff0c;方便扩展&#xff0c;多人协同。换句话说&#xff0c;就是让代码质量更高; 所以并不需要具…

项目一:3-8译码器的设计与实现(FPGA)

本文以Altera公司生产的Cyclone IV系列的EP4CE15F17C8为主芯片的CRD500开发板作为项目的硬件实现平台&#xff0c;并以Quarter 18.1和ModelSim为开发工具和仿真工具。 目录 一、3-8译码器工作原理 二、设计步骤 1、创建工程文件夹和编辑设计文件 &#xff08;1&#xff09;…

STM32+DHT11温湿度传感器(含完整代码)

DHT11是一款常用的数字温湿度传感器&#xff0c;它通过单总线与微控制器通信&#xff0c;输出数字信号&#xff0c;使得数据采集和处理变得简单。本文将详细介绍如何使用STM32微控制器驱动DHT11传感器&#xff0c;并提供完整的代码实现。 DHT11传感器简介 DHT11传感器包含一个…

医院网站开发:Spring Boot的革命

1 绪论 1.1研究背景 随着计算机技术的成熟、普及&#xff0c;现代信息技术革命的迅猛发展,正冲击并进而改变着经济和社会结构。信息化的程度已经成为一个国家&#xff0c;一个企业&#xff0c;一个组织仍至一个人发展的基础和竞争成败的关键。 在实际的生活中&#xff0c;用户都…

洛谷 AT_abc373_d [ABC373D] Hidden Weights 题解

题目大意 有一个有 N N N 个点 M M M 条边的有向图&#xff0c;第 i i i 条边由 u i u_i ui​ 到 v i v_i vi​&#xff0c;权值为 w i w_i wi​。 需要你对图中的每个节点填上一个介于 − 1 0 18 -10^{18} −1018 到 1 0 18 10^{18} 1018 之间的整数&#xff0c;使得…