【C++】STL:string

string是模板,是被typedef出来的类型。

存在两种字符串:string和wstring(宽字符串,unicode)

typedef basic_string, allocator>            string;

typedef basic_string, allocator>           wstring;这个不常使用

实例代码

#include "string"
#include "stdio.h"
#include "iostream"
using namespace std;

void test(const string& t){} //传地址,不可修改
void test(string& t){} //传地址,可以修改
void test(string t){} //这种方式一般不用,直接传值不好,一般使用上面2种方式

int main()
{
    //字符串初始化
    string str1("Liming");
    const char* str1_1 = (char*)str1.c_str();
    cout << str1_1 << endl;
    cout << str1 << endl;
    string str2 = "Lina";
    cout << str2 << endl;
    string str3("abcde", 3); //取字符串中的前三个字符
    cout << str3 << endl;
    string str4;
    cout << str4 << endl;
    string str5 = "";
    cout << str5 << endl;

    //string str6 = NULL;

    //将字符串转换成char*类型
    string text("hello, world!\n");
    const char* p = text.c_str();
    printf("str: %s \n", text.c_str());


    //字符串追加
    string t1;
    t1.append("nancy");
    t1.append("nick", 2);  //取字符串中的前3个字符,输出为nic
    t1.append("jack", 1, 3); //取字符串中的第1到第2个字符,一共2个字符
    t1.append(2, 'h'); //将字符复制2遍加在后面,一定只能是字符,不能是字符串,也就是只能是单引号

    cout << t1 << endl;


    //重载了左值
    string t3 = "hello";
    t3[1] = 'i';
    t3.at(2) = 'p';
    cout << t3 << endl;

    
    //字符串比较
    string t4 = "OK";
    if(t4 == "OK")
    {
        printf("equal \n");
    }


    //字符串查找
    string t5 = "Liming is doing homework";
    int p1 = t5.find("i");
    int p2 = t5.rfind("e");
    cout << "p1:" << p1 << "\n" << endl; //从左开始查找,返回索引值1
    cout << "p2:" << p2 << "\n" << endl; //从右开始查找,返回索引值19

    //截取子字符串
    string t6("abcdefg");
    string r1 = t6.substr(4); //从第4个字符开始一直到最后
    string r2 = t6.substr(4,2); //从第4个字符开始,取2个字符
    cout << "r1:" << r1 << endl;
    cout << "r2:" << r2 << endl;


    printf("end");
    return 0;

}

输出结果为

【C++】STL:string_第1张图片

碰到问题:

(1)有时cout不能输出string?

先来看CString、string和string.h这几个区别

CSting:CString是MFC或者ATL中的实现,是MFC里面封装的一个关于字符串处理的功能很强大的类,只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的string类了。在MFC中使用不需要自己加,但在另外的程序中需要加入#include

string:string类既是一个标准c++的类库,同时也是STL(Standard Template Library,标准模版库)中的类库,已经纳入C++标准之中。它和CString有本质的区别。

string.h:C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等,这个头文件跟C++的string类半点关系也没有,所以 并非 的“升级版本”,他们是毫无关系的两个头文件。

综上,cout函数重载的是string类库中的string类型,而不是CString或string.h中的。

可以将字符串转成char*类型,然后使用cout输出;也可以直接输出,cout是兼容string中的string类型的。

 

你可能感兴趣的:(C++,【C++】)