C++STL学习笔记_(1)string知识

/*============================================
string是STL的字符串类型,通常用来表示字符串  =
============================================*/
#include <iostream>
using namespace std;
#include "string"//string的头文件
#include "algorithm"

/*============================================
string对象的初始化                           =
============================================*/
void main21()
{
    string s1 = "aaa";     //第一种初始化方法
    string s2("bbb");     //第二种初始化的方法
    string s3 = s2;      //通过拷贝构造函数来初始化对象s3
    string s4(10,'a');  //用n个字符c初始化

    cout<<"s1:"<<s1<<endl;
    cout<<"s2:"<<s2<<endl;
    cout<<"s3:"<<s3<<endl;
    cout<<"s4:"<<s4<<endl;

}
/*============================================
string的遍历                                 =
============================================*/
void main22()
{
    string s1 = "abcdefg";
    //1.数组方式
    for (int i = 0;i<s1.length();i++)                           
    {
        cout<<s1[i]<<" ";//出现错误不抛异常,引起程序的中断
    }
    //2.通过迭代器的方式
    for (string::iterator it = s1.begin();it != s1.end();it++) 
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    //3.string的at方式
    for (int i = 0;i<s1.length();i++)
    {
        cout<<s1.at(i)<<" ";//可以抛出异常
    }
    try
    {
        for (int i = 0;i<s1.length() + 3;i++)
        {
            cout<<s1.at(i)<<" "<<endl;//可以抛出异常
        }
    }
    catch (...)
    {
        cout<<"发生异常"<<endl;
    }
}

//字符指针和string的转换
void main23()
{
    string s1 = "aaa bbb";//char*====>string

    //s1====>char *
    printf("s1:%s\n",s1.c_str());

    //char*====>string

    //s1的内容拷贝到buf中
    char buf1[128] = {0};
    s1.copy(buf1,3,0);//注意,只给你copy3个字符 不会变为C风格的字符串
    cout <<"buf1:"<<buf1<<endl;
}

//链接字符串
void main24()
{
    string s1 = "aaa";
    string s2 = "bbb";
    s1        = s1 + s2;
    cout<<"s1:"<<s1<<endl;

    string s3 = "333";
    string s4 = "444";
    s3.append(s4);
    cout<<"s3:"<<s3<<endl;
}

//字符串的查找和替换
void main25()
{
    string s1 = "wbm hello wbm 111 wbm 222 wbm 333";
    //第一次出现wbm的 index
    int index = s1.find("wbm",0);//位置下标是从0开始的
    cout<<"index:"<<index<<endl;

    //求wbm每次出现的数组下标
    int offindex = s1.find("wbm",0);
    while(offindex != string::npos)
    {
        cout<<"offindex:"<<offindex<<endl;
        offindex = offindex + 1;
        offindex = s1.find("wbm",offindex);
    }

    //案例2
    string s3    = "aaa bbb ccc";
    s3.replace(0,3,"AAA");
    cout<<"s3:"<<s3<<endl;


    offindex        = s1.find("wbm",0);
    while(offindex != string::npos)
    {
        cout<<"offindex:"<<offindex<<endl;
        s1.replace(offindex,3,"WBM");
        offindex = offindex + 1;
        offindex = s1.find("wbm",offindex);
    }
    cout <<"s1:"<<s1<<endl;
}

//截断(区间删除)和插入
void main26()
{
    string s1            = "hello hello2 hello1";
    //string &eras(int pos = 0,int n = pos);删除pos开始的n个字符,返回修改后的字符串
    string::iterator it = find(s1.begin(),s1.end(),'l');
    if (it != s1.end())
    {
        s1.erase(it);
    }
    cout<<"s1删除以后的结果:"<<s1<<endl;

    s1.erase(s1.begin(),s1.end());
    cout<<"s1删除以后的结果:"<<s1<<endl;
    cout<<"s1长度:"<<s1.length()<<endl;
    
    string s2 = "BBB";
    s2.insert(0,"AAA"); //头插法
    cout<<"s2结果:"<<s2<<endl;
    s2.insert(s2.length(),"CCC"); //尾插法
    cout<<"s2结果:"<<s2<<endl;
}

void main27()
{
    string s1 = "AAAbbb";
    //1.函数的入口地址 2.函数对象 3.预定的函数
    transform(s1.begin(),s1.end(),s1.begin(),toupper); //全部变为大写
    cout <<"s1:"<<s1 <<endl;

    string s2 = "AAAbbb";
    transform(s1.begin(),s1.end(),s2.begin(),tolower); //全部变为小写
    cout <<"s2:"<< s2 <<endl;
}
int main()
{
    //main21();
    //main22();
    //main23();
    //main24();
    //main25();
    //main26();
    main27();
    return 0;
}

 

posted on 2016-12-30 09:17  金秀  阅读(217)  评论(0编辑  收藏  举报

导航