C++第01课 C++与C的区别(八)

1.C++ string

int main()
{
    //1.string初始化方式
    //构造空的
    string str;
    cout << str.size() <<"\t"<< str.length() << endl;    //    0 0
    //构造方式初始化
    string str1 ("ILoveYou");
    cout << str1 << endl;
    cout << str1.size() << "\t" << str1.length() << endl;    //8 8    不包含\0
    //赋值方式初始化
    string str2 = str1;
    string str3(str1);

    //2.string常规操作
    //连接
    string str4;
    str4 += str3;
    cout << str4 << endl;    //ILoveYou
    str4 = str3 + str2;
    cout << str4 << endl;    //ILoveYouILoveYou
    //比较
    cout <<boolalpha<< (str4 == str3 )<< endl;    //false
    cout << boolalpha<<(str4 > str3) << endl;    //true

    //和java中不同,==调用的是equals方法
    string str5;
    str5 = str4;
    string str6(str4);
    cout << boolalpha << (str5 == str6) << endl;    //true
    string str7;
    str7 = str4;
    cout << boolalpha << (str7 == str5) << endl;    //true
    string str8 = "Hello";
    string str9 = "Hello";
    cout << boolalpha << (str8 == str9) << endl;    //true

    //3.string转换为C语言char *
    //string本质是类 类型
    //c_str() data()得到string内的字符串,二者原型一样,没有区别
    //printf("%s\n", str8);    //
    printf("%s\n",str8.c_str());    //Hello
    printf("%s\n", str8.data());    //hello
    cout << str8.data() << endl;
    cout <<str8.length()<<str8.size()<< sizeof(str8.c_str()) << strlen(str8.data())<<endl;//5 5 4 5

    string str10 = "sjadljndahakdf";
    string str11 = "abvcd";
    cout << sizeof(string) << sizeof(str10) << sizeof(str11) << endl;    //28 28 28
    cout << sizeof(str10.c_str()) << sizeof(str11.c_str()) << endl;        //4 4
    /*
    为什么sizeof(str10.c_str())等等的值恒定为4而sizeof(string), sizeof(str10)等等的值恒定为28?

        string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,
    它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。

        如果你不明白,只要看一下string类的定义,你就明白了。因为你用sizeof(string),它的结果是string类里的所有
    数据成员所占空间之和。而string类里有一个指针,指向一片内存空间的首地址,那里才存放你的字符串。字符串不是
    放在string类里面的,string类里只有指向该内存的指针。
    */

    return 0;
}

2.自己简单实现一个string

struct myString {
    char* str;
    int strSize;
    myString(const char* str="") {
        strSize = strlen(str);    //不包含\0
        this->str = new char[strSize + 1];
        strcpy(this->str, str);
    }
    int size()
    {
        return strSize;
    }
    int length()
    {
        return strSize;
    }
    char* c_str()
    {
        return str;
    }
    char* data()
    {
        return str;
    }
};

3.利用string制作控制台进度条

void process()
{
    string str = "";
    for (int i = 0; i <= 200; i += 10)
    {
        cout << str << endl;
        str += "";
        int result = i / 2 + rand() % 5;
        if (result < +100) {
            cout << result << "%" << endl;
        }
        else {
            cout << "100%" << endl;
            break;
        }
        
        Sleep(1000);
        system("cls");
    }
}
int main()
{
    srand((unsigned int)time(NULL));
    process();
    return 0;
}

实现效果:

 

posted @ 2021-09-03 23:30  Creature_lurk  阅读(37)  评论(0)    收藏  举报