• 热门专题

实战c++中的string系列 string的初始化 删除 转大小写(constructeraseupperlower)

作者:  发布日期:2015-12-14 21:39:55
Tag标签:c++  实战  
  • string是有迭代器设计模式的,我还没有体会到迭代器带给我的好处,很多时候使用类似数组索引的方法就可以完成任务。

    场景1:删除string所有的大写字母
    这里用到erase方法:

    #include<iostream>  
    #include<cctype>  
    #include<string>  
    using namespace std;  
    int main()  
    {
        string str = "This IS A  trick";  
    
        for(string::iterator iter = str.begin();  iter != str.end();++iter){  
              if(isupper(*iter)){  
               str.erase(iter);  
               --iter;  
          }   
     }  
     for(string::iterator iter = str.begin();  
      iter != str.end();++iter)  
      cout<<*iter<<" ";  
     return 0;  
    }  

    上面的代码会错误,原因之前博客《没有躲过的坑–vector使用erase后迭代器变成野指针》说过,即erase后,迭代器指向的位置。

    场景2:初始化string
    之前博客讨论过string的初始化问题,朝花夕拾:

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        string s = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz" + 'A';
        int t = 'A';
        string s1 = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz" + t;
        cout << t << endl;
        cout << s << endl;
        cout << s1 << endl;
        return 0;
    }

    输出结果出乎意料:
    65
    tuvwxyz
    tuvwxyz

    这里需要提醒的是弄清楚字符和字符串的区别,千万别把双引号写成了单引号。
    原因:
    char 类型转成整形
    对const char *进行指针偏移后的指针传给string的构造函数

    场景3:string中的字母转大小写
    常规的for循环就不写了,直接写一个很少用到的:

    #include <iostream>  
    #include <algorithm>  
    using namespace std;  
    
    int main()  
    {  
        string str = "heLLo";  //可以不包含<string>
    
        transform(str.begin(), str.end(), str.begin(), toupper);  
        cout<<str<<endl;//错误,因为没包含<string>
        cout<<str.c_str()<<endl;  
    
        transform(str.begin(), str.end(), str.begin(), tolower);  
        cout<<str.c_str()<<endl;  
    }

    这里需要注意的是,cout不能直接输出string。
    这就引出个重要的话题,不包含string头文件,string可以用;包含string头文件,string也可以用?
    我猜想是标准库不断更新的原因,也为了兼容之前的老版本

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规