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

 

posted @ 2019-10-18 00:12  Dipsyhu  阅读(1100)  评论(0编辑  收藏  举报