实例代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
//一: string类型简介:C++标准库中的类型,代表一个可变长字符串;
char str[100] = "I Love China";//C语言中用法
//二:定义和初始化string对象
string s11; //默认初始化,s1 = ""; ""空串,表示里边没有字符;
string s12 = "I Love China!"; //把I Love China !这个字符串内容拷贝到了s2代表的一段内存中。拷贝时不包括末尾的\0。
string s13("I Love China!"); //跟s2 的写法效果一样
string s14 = s12;// 把s2中的内容拷贝到了s2所代表的一段内存中。
int num = 6;
string s15(num, 'a'); //aaaaaa , 把s5初始化为连续num个字符‘a’组成的字符串,这种方式不太推荐,因为会在系统内部创建临时对象。
//三:string对象上的操作
//(1) 判断是否为空empty(), 返回的布尔值
string s;
if (s.empty()) { //成立
cout << "s为空!" << endl;
}
//(2) size() / length():返回字节/ 字符数量 代表该字符串的长度。unsigned int
string s1;
cout << s1.size() << endl; // 0
cout << s1.length() << endl; // 0
string s2 = "I Love China!";
cout << s2.size() << endl; // 13
cout << s2.length() << endl; // 13
//(3) s[n] : 返回s中的第n个字符(n是个整形值),n代表的是一个位置,位置从0开始,到size() - 1;
//如果用下标n超过这个范围的内容,就会产生不可预测的结果;
string s3 = "hello";
if (s3.size() > 4) {
cout << s3[4] << endl; //输出 o
s3[4] = 'w';
}
cout << s3 << endl; //输出 hellw
//(4) s1 + s2 ;字符串的连接,返回连接后的结果,其实就是得到一个新的string对象。
string s4 = "abcd";
string s5 = "hijk";
string s6 = s4 + s5;
cout << s6 << endl;
//(5) s1 = s2 ;字符串对象赋值,用s2里边的内容取代原来s1里的内容
string s7 = "abcd";
string s8 = "de";
s7 = s8;
cout << s7 << endl;
//(6) s1 == s2; 判断两个字符串是否相等。
//相等: 长度相同,字符全相同。
string s9 = "abc";
string s10 = "abC";
if (s9 == s10) {
cout << "s9 == s10" << endl;
}
//(7) s1 != s2; 判断两个字符串是否不相等。
if (s9 != s10) {
cout << "s9 != s10" << endl;
}
//(8) s.c_str(); 返回一个字符串s中的内容指针。 返回一个指向正规的C字符串的指针常量,也就是以\0结尾的。
//这个函数的引入是为了与c语言兼容,c_str()成员函数把string对象转换成c语言中的字符串样式;
const char *p = s10.c_str(); // abC
char str1[100];
strcpy_s(str1, sizeof(str1), p);//
cout << str1 << endl; //输出: "abC"
//这也是一种初始string方式
string sss(str1); //用C语言的字符数组初始化string类型
//(9) 读写string对象;
string s111;
cin >> s111; //从键盘输入 abc
cout << s111 << endl; //输出: abc
//(10) 字面值和string相加
string s22 = "abc";
string s33 = "defg";
string s44 = s22 + " and " + s33 + 'e';
cout << s44 << endl; //输出: abc and defge
//string s55 = "abc" + "def";//语法上不允许这么加
//string s66 = "abc" + s11 + "def";//中间夹一个string对象,语法上就允许。
//(11) 范围for针对string的使用 : C++中提高了范围for:能够遍历一个序列中的每一个元素
//string 可以看成是一个字符序列
string s77 = "hello world!";
for (auto c : s77){ // auto : 遍历类型自动推断
cout << c << endl; //每次输出一个字符,后边跟一个换行符
}
for (auto &c : s77) {
//toupper()把小字符转成大写, 大写字符没有变化
c = toupper(c);// 因为c是一个引用,所以这相当于改变s77中的值;
}
cout << s77 << endl; //输出: HELLO WORLD!
system("pause");
return 0;
}