c++ 基本字符串操作

//长字符串划分小字符串

#include <sstream>

    string str = "sad ons saa";
    stringstream ss(str); //用str初始化string流
    
    //将ss流中的数据以string形式送入str,遇到' '就完成一次传送
    //str原先内容会完全被覆盖,即使原先字符串比较长
    while(ss >> str)  
    {    
        cout << str << endl;  
     //sad
     //ons
     //saa 
    }

//字符串删除某种字符


    string str = "asod nasd_onsa";
    for(auto it = str.begin() ; it != str.end() ;)
    {
            if(*it == 'a')
                str.erase(it);    //erase删除迭代器所指元素,返回下一个有效迭代器,
                           //相当于++了
            else it++;    
    }        
    //处理后str == "sod nsd_ons"
   
   //删除最后一个字符
    str = "asld";
   str.pop_back();  //法一
   str.erase(str.end()-1); // 法二
   
   str.erase(str.end()-3,str.end() );  //会将sld删除

//替换

 // 将str从开始往后两个字符替换成“string”
   string str = "abcdefg";
   str.replace(str.begin() , str.begin()+2 , "string" ); //stringcdefg
   str.replace(0,2,"string");  //等效

//类型转换

 #include<string>
 #include<sstream>
 #include<iomanip> 


    double a = 9.04;
    string s = to_string(a);   // s == "9.040000"  默认六位小数,多出的话四舍五入 
    double d = 3.1415926535897932384;
    stringstream ss;
    ss << setprecision(15) << d;  //保留15位有效数字,小数点后有14位
    
    //string流转string 
    s = ss.str();   //使用完这个方法要clear,然后插入其他值才能转其他类型
     ss.clear();  
     //另一种方法           
    ss >> s;
    
    
    string s1 = "32";
    int a = stoi(s1);   //a == 32
    // stod 转double
    //stof  转float
    // stold 转long double
    //stoll 转long long
    //遇到非法输入会截取合法部分  如"32ab2" 那只截取32 

//查找子串


    string s = "oasmfaslf";
    s.find("as");   //返回字符串第一次出现的下标 1
    s.find("asdd");  //找不到返回一个很大的数4294967295  这个数是常量npos
    if(s.find("losad") == s.npos)
        cout << "找不到" << endl;

//截取字串


    string s = "aoncaoa,a@pamc.c";
    string str = s.substr();  //不传参数,相当于从0开始拷贝 aoncaoa,a@pamc.c
    string s1 = s.substr(0,4); //从0开始拷贝4个字符 aonc
    string s2 = s.substr(2,3); //从2开始拷贝3个字符 nca
    string s3 = s.substr(3);    //从3开始之后全部拷贝 caoa,a@pamc.c 
    string s4 = s.substr(s.find('@') , 2); //find找到@的开始下标9,从这个下标开始拷贝2字符 @p
                            

//大小写转换

#include <algorithm>  

    char c = 'a';
    char ch = toupper(c);  // A
    char ch1 = tolower(ch);  // a
    
    string str = "ONSJansd";
    transform(str.begin() , str.end(), str.begin() , ::toupper);  // str == ONSJANSD
    transform(str.begin() , str.end(), str.begin() , ::tolower);  // str == onsjansd
    //transform(容器首迭代器,容器尾迭代器,结果容器首迭代器,函数  )
    //前两个参数确定了要操作容器的区间,第三个参数指定操作结果放到哪,
    // 第四个参数为函数名,指定元素如何操作,可以自定义
    



char myupper (char c)
{
    if('a' <= c && c <= 'z')
         c -= 32;  
    return c;  
}

transform(str.begin() , str.end(), str.begin() , myupper);
    

    //字符串拼接


    //在字符串的末尾添加str,
    //在字符串的末尾添加str的子串,子串以index索引开始,长度为len
    //(省略len则加到末尾为止)
    //在字符串的末尾添加num个字符ch,
    //在字符串的末尾添加以迭代器start和end表示的字符序列
    string str1 = "I like C++";
    string str2 = ",I like the world.";
    string str3 = "Hello";
    string str4 = "Hi";
    string str5;
    string str6;

    str1.append(str2);  //I like C++,I like the world.
    str3.append(str2, 11, 7);  //Hello World.
    str4.append(5, '.');  //Hi.....
    str5.append(str4.begin(), str4.begin() + 3); // Hi.
    str6.append(str1, 3); // ike C++,I like the world.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凛_Lin~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值