蓝桥杯笔记day1

                                字符串
一·基本用法与注意事项,初始化,连接,查找,修改。
·初始化:string str1="hello"; (和int初始化一样,只是值需要用“ ”)
        string str2="world";
·连接:string str3=str1+“ ”+str2;
·获取修改长度:str3.size();
·访问和修改字符:string str4=str3[0];
               str3[0]='H'(改为大写的)
·查找子字符串:最终目的是找到子字符串在原字符串中的第一个位置。
              1·size_t表示无符号整数类型,范围很大。2·如果在字符串中没有找到这个子字符串,会返回nops(和stl的find类似,如果没找到会返回end())。
              size_t pos=str3.find("world");
              if(pos!=string::nops)  cout<<"position is:"<<pos
  ·erase-remove惯用法:先使用remove整理逻辑(避免使用删除的时候重复移动),再使用erase真正的删除s.erase(remove(s.begin(),s.end(),ch),s.end());。remove过后会指向最后一个元素的下一位。
  ·geline与cin混用问题。如果先使用cin会将留下一个/n,导致getline读到换行符得到空字符串。
二·string的特点
 动态大小。stl风格的接口。支持迭代器。

三·string的构造函数
 string提供了多种构造函数来初始化字符串。
 和普通的初始化没什么区别,比较特殊的是可以和vector一样:srting str=(5,'a');
四·常用操作
 erase()
 append()在末尾追加内容  str.append("hi");
 substr(初始位置,截至往后数第几个)获取子字符串  str.substr(0,2).
 前面讲过的find这些也很常用
五· string与stl的关系
 可以和stl中的容器无缝配合的使用,例如将string存储在vector,map里面
 const:为了安全(只读,防止在循环中修改原数据)   &:为了高效(避免拷贝,直接访问原数据)。 auto:用就完事。
 string与vector结合使用:vector<string> words={"hello","world"};
                        for(const auto& word : words)   cout<<word<<" ";
 例题一:删除字符
  题目描述:
   输入一个字符串(长度小于20),再输入一个单独字符,。将字符串中的这个字符全部删除,输出新的字符串。
  代码与思路:用一个remove-erase足以解决。注意输入可能有空格。  
                          stringstream
  一简介:
   继承输入输出流 与实现字符串转换成其他类型数据。分为stringstream(全能王),istringstream(只输入),ostringstream(只输出)
  二用法:
   1stringstream的用法。创建ss(一包薯片) ——> 使用一个变量(手)拿出数据(拿出的薯片是什么类型取决于变量是什么类型)。配合vector可以读一行不定数量的整数
   2iss进行字符串解析。专注于从字符串中提取不同的数据类型
   3oss进行字符串拼接。使用oss的时候需要将结果先转为对应类型,例如str(),但在iss时就不用。因为使用oss时,使用的是 << 数据流向oss,然后输出的时候oss不能想iss那样有一只手来拿出数据(转换类型),所以需要str()直接将整包数据转换为string类型。

虽然ss可以兼顾iss和oss的功能但还是有必要进行区分,这样可以加快编译速度,并且增强易读性。(想不到其他理由了 bushi )。
例题二:
题目描述:输入第一行n表示有n行数字,每行若干整数(上限20个,200个字符)数字不大。每行输出对应输入行的和
解法:要执行三行数据肯定要有一层循环,执行累加操作又要一层循环。注意如果先使用了cin后面还想用getline(cin,line),那么必须在cin后面使用一次getline(cin,line),然后再在正确的地方使用一次getline。即getline在这个条件下要使用两次
字典序
一·定义:核心原则 “左往右逐个比较”,2>10,aba>abc,apple>app.
二·字典序全排列函数:next_permutation(begin,end)(排列的意思)。
题目描述:n个长l的字符串。链接字符串。比较这些拼接而成的字符串的字典序.输入:一n,l。二n个字符串。输出字典序最小的字符串。
解题思路:题要求输出拼接后字典序最小的字符串,把字符都存进字符数组里面。由于题目给的每个字符串长度都一样,那问题就简单了,直接使用sort排序然后输出就得了,因为abc和cba,sort可以直接通过字典序比较出谁打谁小,那如果长度不一样,就不能使用后sort了,因为b和ba,如果还是使用sort,那么拼接出来的结果会是bba,但是bba真的是最小的吗,当然不是!bab才是最小的。那有卖有什么办法呢?当然,既然长度不一样,那把两个字符串加起来长度不就一样了吗,于是可以写一个bool cmp(string a,string b){return a+b<b+a}//a站在前面就返回true,即左边永远大于右边。

posted @ 2026-03-31 01:01  花捂嘴  阅读(4)  评论(0)    收藏  举报