zoukankan      html  css  js  c++  java
  • C++ STL string对象操作汇总

    string对象


    C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,显得十分不便。C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供了添加、删除、替换、查找和比较等丰富的方法。

    虽然使用vector<char>这样的向量也可以处理字符串,但功能比不上string。向量的元素类型可以是string,如vector<string>这样的向量,实际上就类似于C语言中的字符串数组。

    使用string容器,需要头文件包含声明“#include <string>”。string文件在C:Program FilesMicrosoft Visual StudioVC98Include文件夹中可以找到。


    1.创建string对象

    int main ()
    {
        string s;
    };

    2.给string对象赋值

    • 直接对字符串进行赋值
    int main ()
    {
        string s;
        s="hello word";
        cout<<s<<endl;
        return 0;
    }
    • 更常用的方法就是,把一个字符串指针赋给一个字符串对象
    int main ()
    {
        string s;
        char ss[100];
        //scanf是输入速度比cin块得多
        //scanf是c语言的函数,不支持string对象
        ss="hello word";
        s=ss;
        cout<<s<<endl;
        return 0;
    }

    3.从string尾部添加字符

    int main ()
    {
        string s;
        s=s+'a';
        s=s+'b';
        s=s+'c';
        cout<<s<<endl;
        return 0;
    }

    4.从string尾部添加字符串

    • 直接使用“+”操作符,代码如下
        s=s+"abd";
        s=s+"123";
    • 采用append()方法,代码如下
        s.append("abs");
        s.append("123");

    5.给string对象插入字符(insert)

    int main ()
    {
        string s;
        s="123456";
        //定义迭代器
        string::iterator it;   
        //迭代器位置为字符串首
        it=s.begin();   
        //把字符'p'插入到第1个字符前(注意,字符位置是从0开始计数) 
        s.insert(it+1,'p');
        return 0;
    }

    运行结果

    1p23456

    6.访问string对象的元素

    一般使用下标方式随机访问string对象的元素,下标是从0开始计数的。另外,string对象的元素是一个字符(char),这点一定要清。代码如下:

    int main ()
    {
        string s;
        s="123456";
        //输出对象的第二个元素
        cout<<s[1]<<endl;
        //string 里面元素为字符串类型
        cout<<s[1]-'0'<<endl;
        return 0;
    }
    

    7.删除string对象元素

    • 1.清空一个字符串,可以直接对string赋空字符串即可。
    • 2.使用erase()方法删除迭代器所指的按个元素或这个区间中的所有元素。
      代码如下
    int main(int argc, char* argv[]) 
    { 
       string s;   
       s="abc123456";   
       //定义迭代器变量,指向字符串对象首元素
       string::iterator it=s.begin();   
       //删除第3个元素,元素位置从0开始计数
       s.erase(it+3);   
       cout<<s<<endl;   
       //删除0~4区间的所有元素
       s.erase(it,it+4);   
       cout<<s<<endl;   
       //清空字符串
       s="";   
       //输出字符串的长度
       cout<<s.length()<<endl;   
       return   0;   
    } 

    运行结果:

    abc23456
    3456
    0

    8.返回string对象的长度(length()

    • 1.length()方法可以返回字符串的长度
    • 2.empth()方法可以判断字符串是否为空
    int main ()
    {
        string s;
        s="abcdef";
        //输出字符串的长度
        cout<<s.length()<<endl;
        //清空字符串
        s="";
        //判断字符串是否为空
        cout<<s.empty()<<endl;
        return 0;
    }

    运行结果

    9
    1

    9.替换string对象的字符(replace())

    #include <string> 
    #include <iostream> 
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    { 
       string   s;   
       s="abc123456";   
       //从第3个开始,将连续的3个字符替换为“good”
       //即将“abc”替换为“good”
       s.replace(3,3,"good");   
       cout<<s<<endl;   
       return   0;   
    } 

    运行结果:

    abcgood456

    10.搜索string对象的元素或子串(find())

    采用find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定),如果查到,则返回下标值(从0开始计数),如果查不到,则返回4294967295。

    find()方法有很多重载函数,下面的代码,仅举出了一种用法。

    #include <string> 
    #include <iostream> 
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    { 
       string   s;   
       s="cat dog cat"; 
       //查找第一个字符‘c’,返回下标值
       cout<<s.find('c')<<endl;   
       //查找第一个子串“c”,返回下标值
       cout<<s.find("c")<<endl;   
       //查找第一个子串“cat”,返回下标值
       cout<<s.find("cat")<<endl;   
       //查找第一个子串“dog”,返回下标值
       cout<<s.find("dog")<<endl;      
       //查找第一个子串“dogc”,查不到则返回4294967295 
       cout<<s.find("dogc")<<endl;   
       return   0;   
    } 

    运行结果如下:

    0
    0
    0
    4
    4294967295

    11.string对象的比较(compare())

    string对象可与使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;如果它比对方小,则返回-1;如果它与对方相同相等),则返回0。代码如下:

    #include <string> 
    #include <iostream> 
    using namespace std; 
    int main(int argc, char* argv[]) 
    { 
       string   s;   
       s="cat dog cat"; 
       //s比“cat”字符串大,返回1 
       cout<<s.compare("cat")<<endl;   
       //s与“cat dog cat”相等,返回0 
       cout<<s.compare("cat dog cat")<<endl; 
       //s比“dog”小,返回-1 
       cout<<s.compare("dog")<<endl;   
       return   0;   
    } 

    运行结果如下:

    1
    0
    -1

    12.用reverse方向排序string对象

    采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序。reverse()方法需要声明头文件#include<algorithm>。代码如下:

    #include <string> 
    #include <iostream> 
    #include <algorithm> 
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    { 
       string   s;   
       s="123456789";   
       reverse(s.begin(),s.end());   
       cout<<s<<endl;   
       return   0;   
    } 

    运行结果如下:

    987654321

    13.string对象做vector元素

    #include <vector> 
    #include <string> 
    #include <iostream> 
    #include <algorithm> 
    using namespace std; 
    int main(int argc, char* argv[]) 
    { 
       vector<string>   v;   
       v.push_back("Jack");   
       v.push_back("Mike");   
       v.push_back("Tom");   
       cout<<v[0]<<endl;   
       cout<<v[1]<<endl;   
       cout<<v[2]<<endl;   
       cout<<v[0][0]<<endl;   
       cout<<v[1][0]<<endl;   
       cout<<v[2].length()<<endl;   
       return   0;   
    } 

    运行结果如下:

    Jack
    Mike
    Tom
    J
    M
    3

    14.字符数组和string对象的输入输出

    #include <string> 
    #include <iostream> 
    using namespace std; 
    int main(int argc, char* argv[]) 
    { 
        string s;   
        char ss[100];   
        //输入字符串到字符数组中
        scanf("%s",&ss);   
        //字符数组赋值线字符串对象
        s=ss;   
        //用printf输出字符串对象,要采用c_str()方法
        printf(s.c_str());   
        //换行
        cout<<endl;   
        //用printf输出字符数组
        printf("%s",ss);
        //换行
        cout<<endl;   
        //用cout输出字符串对象
        cout<<s<<endl;   
        //用cout输出字符数组
        cout<<ss<<endl;   
        return 0; 
    } 

    15.tring对象与sscanf函数

    在C语言中,sscanf函数很管用,它可以把一个字符串按你需要的方式分离出子串,甚至是数字。下面这个程序演示了sscanf函数的具体用法:

    #include <string> 
    #include <iostream> 
    using namespace std; 
    int main(int argc, char* argv[]) 
    { 
       string s1,s2,s3;   
       char sa[100],sb[100],sc[100];   
       //将字符串分离成子串,分隔符为空格
       sscanf("abc 123 pc","%s %s %s",sa,sb,sc); 
       s1=sa;   
       s2=sb;   
       s3=sc;   
       cout<<s1<<" "<<s2<<" "<<s3<<endl; 
       //将字符串分离成数字,分隔符为空格
       //当用到数字的时候,跟scanf一样,它要传指针地址
       int a,b,c;   
       sscanf("1 2 3","%d %d %d",&a,&b,&c); 
       cout<<a<<" "<<b<<" "<<c<<endl; 
       //将字符串分离成数字,分隔符为“,”和“$”
       //当用到数字的时候,跟scanf一样,它要传指针地址
       int x,y,z;   
       sscanf("4,5$6","%d,%d$%d",&x,&y,&z);   
       cout<<x<<" "<<y<<" "<<z<<endl; 
       return 0;   
    } 

    运行结果如下:

    abc 123 pc
    1 2 3
    4 5 6

    16.string对象与数值相互转换

    #include <iostream> 
    #include <string> 
    #include <sstream> 
    using namespace std; 
    //C++方法:将数值转换为string 
    string convertToString(double x) 
     { 
       ostringstream o; 
       if (o << x) 
          return o.str(); 
       return "conversion error";//if error 
     }  
    //C++方法:将string转换为数值
    double convertFromString(const string &s) 
     { 
       istringstream i(s); 
       double x; 
       if (i >> x) 
         return x; 
       return 0.0;//if error 
     }  
    int main(int argc, char* argv[]) 
    { 
       //将数值转换为string的第一种方法:C方法
       char b[10];   
       string a;   
       sprintf(b,"%d",1975);   
       a=b;
       cout<<a<<endl;   
       //将数值转换为string的第二种方法:C++方法
       string   cc=convertToString(1976);   
       cout<<cc<<endl;   
       //将string转换为数值的方法:C++方法
       string   dd="2006";   
       int   p=convertFromString(dd)+2;   
       cout<<p<<endl;   
       return   0;   
    } 
  • 相关阅读:
    关于策略模式和简单工厂模式的理解
    ab压力测试使用说明
    PHP AMQP扩展安装
    ELK配置说明及个人理解
    冒泡算法和快速排序算法实现和比较
    rabbitMQ PHP 链接实例
    关于长连接和短连接的理解及使用场景
    ABP框架 替换默认审计实现
    System.DllNotFoundException: Unable to load shared library 'libdl' or one of its dependencies .NET Core 图片操作在 Linux/Docker 下的坑
    docker 学习资料
  • 原文地址:https://www.cnblogs.com/lanaiwanqi/p/10445738.html
Copyright © 2011-2022 走看看