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; }
实现效果:

浙公网安备 33010602011771号