• 猿创征文——C++|string类2


     

    目录

     assagin|erase|insert

     c_str()

    find 

    用find和substr实现网址的分离 

    operator (了解内容)

    getline 

     convert

    习题 字符串中的第一个唯一字符 

    习题 验证一个字符串是否回文 


     assagin|erase|insert

    assign相当于赋值语句 

     

     insert插入,可插入某个string对象,字符串,字符,在某位置前插入

    若想在空格处插入%20,下面这种写法会出问题

     

    当遇到空格之后,insert会把%20插入到空格前面,然后把其余字符串往后挪, 

    而插入之后,i还在原来位置,往后遍历又会遇到空格,所以程序会陷入死循环 

    修改每次i插入后的位置,程序正常运行

     若想吧空格替换为%20

    erase是用来删除的 

    string& erase(size_t pos=0,size_t lend=npos)

    从0这个位置开始删除len个字符

    如果len>剩余字符串长度,则有多少删除多少,删到结尾

     用insert和erase效率太低,我们采用空间换时间的方法来优化

    时间复杂度比之前低一点,但是空间复杂度变高

     

    刚才的写法,还可用replace替代,replace是用来替换的,但是效率不高,也要挪动数据,

    insert,erase,replace不推荐使用,效率低

     c_str()

    c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。
    这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。

     

    返回const char * 类型 

     用C语言的方式打开文件,此时报错

     加上c_str即可正常运行

     读取当前文件

     比较这俩种写法

    效果一样 ,但是实际不一样,底层原理不一样

     C++中是以string对象size为准,size为多少就输出多少个

    而C语言是以常量字符串遇到\0结束

    find 

     

     find可查找一个字符,字符串,string对象,pos指从某个位置开始查,n代表要匹配的字符序列的长度。

    返回值是无符号类型,如果找到了返回找到的第一个字符的位置,如果没找到返回string::npos,npos是一个特别大的数字

     

     有时还会用到substr

     取当前string的字符串返回一个新对象,从pos位置,取len个字符,规则跟前面取字符一样

    用find和substr查找文件的后缀名

     有的文件后缀比较复杂:如.exe.zip

    当我们想取最后一个后缀的时候,可用rfind

    搜索由其参数指定的序列的最后一次出现。 

    把find替换为rfind之后,直接找到最后一个.

    用find和substr实现网址的分离 

    1. void test_string5()
    2. {
    3. string ur1 = "https://cplusplus.com/reference/string/string/rfind/";
    4. size_t pos = ur1.find("://");
    5. string ur2 = ur1.substr(0, pos-1);
    6. cout << ur2 << endl;
    7. size_t pos1 = ur1.find('/', pos + 3);
    8. string ur3 = ur1.substr(pos + 3, pos1 - pos-3);
    9. cout << ur3 << endl;
    10. string ur4 = ur1.substr(pos1+1);
    11. cout << ur4 << endl;
    12. }
    13. int main()
    14. {
    15. test_string5();
    16. return 0;
    17. }

     

      find_first_of:在字符串中搜索与其参数中指定的任何字符相匹配的第一个字符,指定pos位置时,从pos位置开始搜索,匹配一个字符就够了(不是全部匹配)

    operator (了解内容)

    string还有+比较大小等功能

     

    getline 

    不管是cin还是scanf,遇到空格或者换行会进行间会把hello传输给a,空格和c保留在缓冲区

     

     C++ string中有getline可以解决上面的问题

     从 is 中提取字符并将其存储到 str 中,直到找到分隔字符 delim(或换行符“\n”,表示 (2))

    如果到达文件的末尾或者在输入操作期间发生其他错误,则提取也会停止。

    如果找到分隔符,则将其提取并丢弃(即不存储它,下一个输入操作将在它之后开始)。

    请注意,调用之前的任何内容都将替换为新提取的序列。

    字符串最后一个单词的长度_牛客题霸_牛客网 (nowcoder.com)

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. string str;
    6. getline(cin,str);
    7. size_t pos=str.rfind(' ');
    8. if(pos!=string::npos)
    9. {
    10. cout<size()-1-pos<
    11. }
    12. else
    13. {
    14. cout<size()<
    15. }
    16. }

     convert

    C++中convert使用率比较高

     atoi可把字符串转整形

     itoa整形转字符串

    to_string将数字常量转换为字符串,返回值为转换完毕的字符串,返回类型为string

     也能转回去

     

    习题 字符串中的第一个唯一字符 

    387. 字符串中的第一个唯一字符 - 力扣(LeetCode) 

    1. class Solution {
    2. public:
    3. int firstUniqChar(string s) {
    4. int arr[26]={0};
    5. for(auto ch:s)
    6. {
    7. arr[ch-'a']++;
    8. }
    9. for(int i=0;isize();i++)
    10. {
    11. if(arr[s[i]-'a']==1)
    12. return i;
    13. }
    14. return -1;
    15. }
    16. };

     思路:创建一个容量为26的整形数组,数组第一个元素到第一个元素分别用来统计a到z出现的次数,

    习题 验证一个字符串是否回文 

    125. 验证回文串 - 力扣(LeetCode)

    1. class Solution {
    2. public:
    3. bool IslettersorNumb(char str)
    4. {
    5. if((str>='0'&&str<='9')||(str>='a'&&str<='z'))
    6. return true;
    7. else
    8. return false;
    9. }
    10. bool isPalindrome(string s) {
    11. for(auto& ch:s)
    12. {
    13. if(ch>='A'&&ch<='Z')
    14. ch+=32;
    15. }
    16. int begin=0,end=s.size()-1;
    17. while(begin
    18. {
    19. while(beginIslettersorNumb(s[begin]))
    20. begin++;
    21. while(beginIslettersorNumb(s[end]))
    22. end--;
    23. if(s[begin]!=s[end])
    24. return false;
    25. else
    26. begin++;
    27. end--;
    28. }
    29. return true;
    30. }
    31. };

  • 相关阅读:
    JavaFx 使用字体图标记录
    ShowDoc突破边界上线Linux不出网主机
    家用电器行业商业供应链协同平台解决方案:供应链系统管理精益化,助推企业智造升级
    头歌平台——大数据技术——上机
    掌握未来技术:一站式深度学习学习平台体验!
    Hot 100总结【leetcode】
    顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH)
    8万字带你入门Rust
    y114.第六章 微服务、服务网格及Envoy实战 -- Envoy网格安全(二五)
    CentOS7系统下安装OpenOffice
  • 原文地址:https://blog.csdn.net/weixin_49449676/article/details/126738114