• C++ 标准库字符串类使用


    标准库中的字符串类

      C++语言直接支持C语言所有概念。

      C++中没有原生的字符串类型。

    由于C++中没有原生的字符串类型,C++标准库提供了string类型。

      1、string 直接支持字符串链接

      2、字符串大小比较

        /*实验 字符串排序 拼接*/    

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    /*实验1 字符串排序 拼接*/
    string string_add(string s[],int addnumber)
    {
        string ret="";
        for(int i= 0; i<addnumber ;i++)
            {
                ret += s[i]+';';//字符串拼接
            }
        return ret;
    }
    
    //首字母排序  swap();C++交换函数
    //按照首字母排序
    void string_sord(string s[],int len)
    {
        for(int i = 0;i<len ; i++)
            {
                for(int j=i ;j<len;j++)
                if(s[i] > s[j])
                    swap(s[i],s[j]);//使用 swap()交换两个字符串
            }
    }
    
    int main()
    {
        string sTest[3] = 
            {
                "abc",
                "cba",
                "bwe"
            };
        cout<<string_add(sTest,3)<<endl;
        cout<<endl;
        string_sord(sTest,3);
        for(int i = 0; i< 3;i++)
        cout<< sTest[i]<<endl;
        return 0;
    }

    输出结果:  

    abc;cba;bwe;
    
    abc
    bwe
    cba

      使用C++标准库中的string 进行字符串的拼接 排序。

      3、子串查找和提取

      4、字符串的插入和替换

    字符串与数字的转换:

      1、标准库中提供了相关类对字符串和数字进行转换。

      2、字符串sstream 用于string 的转换

        2.1、<sstream> 头文件

        2.2、istringstream  字符串输入流

        2.3、ostringstream 字符串输出流

     字符串转数字、数字转字符串。

      istringstream与ostringstream 字符串流使用

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    //string to float 
    void stringToNumber(const string s,float& n)
    {
        
        istringstream oss(s);//创建istringstream流 将字符传入istringstream流中
        oss>>n;//将字符s 转换为数字n
        
        //istringstream(s)>>n;//使用istringstream 字符串输入流
        
    }
    
    //数字 转 字符
    void numberToString(const float& f, string& s)
    {
        
        ostringstream oss;//创建 ostringstream 流
        oss << f;//将数字传入流
        s=oss.str();//使用流中的.str()函数获取字符串
        //s= ((ostringstream&)(ostringstream()<<f)).str();
    }
    
    
    //由于实现的是float之间的相互转换。要实现int 还需要写,下面通过宏定义的方式进行修改,后期使用模块函数修改。
    //使用临时变量 ,由于临时变量只有一条语句的声明周期。
    //修改如下
    #define toNumber(s,n) (istringstream(s)>>n)
    #define toString(n)   (((ostringstream&)(ostringstream()<<n)).str())
    int main()
    {
        float temp_val;
        stringToNumber("1.12",temp_val);
        cout << temp_val <<endl;
        string sTest = "";
        numberToString(1.22,sTest);
        cout <<sTest <<endl;
    
        double val=0;    
        if(toNumber("123",val))
            cout << val << endl;
        cout << toString(13.25) <<endl;
        
        
        return 0;
    }

    运行结果:  

    1.12
    1.22
    123
    13.25

     字符串左右移动:(实现字符串的 <<  >>操作) 实现字符串的循环左右移动。  

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    
    //使用字符串  string_nam.substr();//字符串剪切函数
    //string_nam.length(); 获取当前字符串长度
    void testFun()
    {
        string s = "abcdef";
        string sOut ="";
        sOut = s.substr(3);
        sOut += s.substr(0,3); 
        cout <<sOut <<endl;
        cout << s.length() <<endl;
    }
    
    
    void testFun1( string &s,int n)
    {
        string temp ="";
        unsigned int mark = 0;
        n = n %s.length();//防止n 超过字符串的长度。移动长度与字符串长度相等相当于不移动
        mark = s.length()-n;//获取字符串长度
    
        temp = s.substr(mark);//从 第mark个数字截取后续的字符
        
        temp += s.substr(0,mark);//截取从0到mark的字符 ,完成字符移动
    
        s = temp;
        
    }
    
    string operator >> (const string &s ,int n )
        {
            string temp ="";
            unsigned int mark = 0;
            n = n %s.length();//防止n 超过字符串的长度。移动长度与字符串长度相等相当于不移动
            mark = s.length()-n;//获取字符串长度
    
            temp = s.substr(mark);//从 第mark个数字截取后续的字符
            
            temp += s.substr(0,mark);//截取从0到mark的字符 ,完成字符移动
    
            return temp;
        }
    
    string operator << (const string &s ,int n )
        {
            string temp ="";
            unsigned int mark = 0;
            n = n %s.length();//防止n 超过字符串的长度。移动长度与字符串长度相等相当于不移动
            mark = s.length()-n;//获取字符串长度
            
            temp = s.substr(s.length()-mark);//从 第mark个数字截取后续的字符
            temp += s.substr(0,s.length()-mark);//截取从0到mark的字符 ,完成字符移动
    
            return temp;
        }
    
    int main()
    {
        string sTest ="abcdefghij";
        cout << sTest <<endl;
        string sTest2 =sTest>>3;    
        cout << sTest2 <<endl;
        sTest2 = sTest<<1;    
        cout << sTest2 <<endl;
        return 0;
    }

    运行:

      

    abcdefghij
    hijabcdefg
    bcdefghija
  • 相关阅读:
    Gradle 修改 Maven 仓库地址
    返回到上一页的html代码的几种写法
    Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
    MyBatis传入多个参数的问题
    8 个最优秀的 Android Studio 插件
    Html中隐藏a标签
    js中获取jsp中的参数
    同一个页面里的JS怎样获取jsp从别的页面获取的参数
    《Android源码设计模式解析与实战》读书笔记(一)
    HDU ACM 1068 最大独立集
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/11689392.html
Copyright © 2020-2023  润新知