(四十八)string类

来源:互联网 发布:python tushare 安装 编辑:程序博客网 时间:2024/05/02 19:39

string类可以将字符串视为输入到一个简单变量中,像使用一个变量那样使用他。


前提是:使用头文件#include<string>,另外,string类位于名称空间std中,因此需要使用using namespace std;或者std::string 或者using std::string。


在其他方面,又类似字符串那样使用。例如,在声明并初始化的时候,需要给字符串加上双引号或者单引号,像 string abc="aaa"; 这样。


上代码:

#include<iostream>#include<string>//使用string类必须调用头文件stringint main(){using namespace std;char aaa[20];//声明数组char bbb[20] = "很帅";//声明数组并初始化string ccc;//声明string类型变量,注意,使用string 需要启用名称空间std,并且无需指定长度string ddd = "真的很帅";//声明string类型变量,并进行初始化,并且无需指定长度cout << "请输入一个人的名字" << endl;cin.getline(aaa, 20);//读取一行字符串,需要指定长度cout << "请输入第二个人的名字" << endl;cin >> ccc;//将用户输入的内容赋给变量ccc,注意,因为无需指定长度,因此即使很长也没有关系,但注意,中间不能有空格cin.get();//注意,这一行代码是为了舍弃上一行代码cin读取到最后的换行符。假如下一行依然使用cin进行读取,是无需输入这行代码的string eee;cout << "请输入第三个人的名字,姓和名之间请加空格" << endl;getline(cin, eee);//使用getline(cin,string的变量名)可以读取带空格的字符串,否则只读取字符串中空格之前的字符串string fff;cout << "第四个人名:" << endl;cin >> fff;//因为使用了cin,因此不需要再使用cin.get()来读取掉换行符。但是如果有空格,空格后的内容并不会被读取到变量fff之中cout << endl;cout << "你知道么?" << aaa <<" "<< bbb << endl;cout << "再告诉你一个秘密:" << ccc <<" "<< ddd << endl;cout << "第三件事是:" << eee << " 很厉害!" << endl;cout << "第四个人的名字是 " << fff;cout << endl;cout << "第一个人名字的第一个字符是:" << aaa[0] << endl;cout << "第二个人的名字的第二个字符是" << ccc[1] << endl;//注意,读取第二个字符,中括号里面的数字为1,和字符串的方式相同cout << "string类的字符,可以通过数组那样的方式,来读取其中第N个字符,并且输入的数字为N=1。" << endl;system("pause");return 0;}

输出结果:

请输入一个人的名字a b请输入第二个人的名字cde请输入第三个人的名字,姓和名之间请加空格f g h第四个人名:i jk你知道么?a b 很帅再告诉你一个秘密:cde 真的很帅第三件事是:f g h 很厉害!第四个人的名字是 i第一个人名字的第一个字符是:a第二个人的名字的第二个字符是dstring类的字符,可以通过数组那样的方式,来读取其中第N个字符,并且输入的数字为N=1。

注意:

①我们可以发现,第四个人名i jk只显示出字符i,而空格和jk则没有被读取。想要读取空格,就需要像第三个人名那样,使用函数getline(cin,string变量名)。

②虽然string类型可以像简单变量那样使用,但也可以被像字符串(数组)那样读取字符串(数组)中的第N个字符。读取方式几乎完全等同于读取字符串(数组)中字符的方法。

③string类型在创建变量时,相对于字符串(数组)那样需要标明长度的方式,显得更安全可靠。而且可以自动根据实际输入的字符串长度调整自己的长度。例如在string abc;的时候,abc的字符串长度为0,在string aaa="ab";的时候,字符串的长度则为3(包括最后的空白字符)。

 

 

string类的赋值:

我们知道,当有两个数组aaa,bbb时,其中aaa已经被初始化,但是bbb不能通过赋值的方式,将aaa中的字符串赋给数组bbb,如bbb=aaa;这种方式是错误的。

但是当有两个string类型的变量ccc和ddd时,假如ccc={"abbb"};已被初始化,是可以通过赋值的方式,将ccc的字符串赋给ddd,如ddd=ccc;cout<<ddd;的输出结果是abbb。

 

 

string类的相加:

也可以将两个string类型的变量进行相加,并赋值给第三个string变量,后者将被加到前者的字符串的后面。方法是:string变量C=string变量A+string变量B。

例如string ccc = { "abc" };string ddd = "efg";string eee = ccc + ddd;cout << eee;则输出结果为abcefg(注意,中间没有空格或者别的什么)。

 

也可以直接将第二个string类型变量加到第一个string后面,第一个变量则为原来两个变量拼合起来。方法是 目标string变量 += 被加的string变量。

例如: string ccc = { "abc" };string ddd = "efg";ccc += ddd;cout << ccc;输出结果为abcefg

 

关于相加,第一种方式是相加的两个变量没有变化,第三个变量为相加两个变量合起来之后的字符串。第二种方式是被变的string变量没有变量,目标string变量变化为两个变量合并起来之后的字符串。

 

上代码:

#include<iostream>#include<string>int main(){using namespace std;string aa;string bb = "很漂亮";string cc;string dd = "真的";//声明四个string变量,其中两个进行初始化cout << "请输入一个妹子的名字:";cin >> aa;//要求用户输入一个名字,并赋值给string变量aacc = aa + bb;//变量cc由aa和bb拼接而成,方式是用加号cout << cc << endl;cout << endl;aa += dd;//将变量dd加到变量aa的字符串后面aa += bb;//再将变量bb加到变量aa的字符串后面cout << aa << endl;//变量aa是由原来的aa后面加上变量dd的字符串,然后后面再加上变量bb的字符串cout << endl;aa = "杨幂(人称大幂幂)";//可以直接给已经有字符串的string变量进行赋值cout << aa << "是一个明星。\n";//显示新的string变量aacc = aa;//可以通过直接赋值的方式,将变量aa的值赋值给变量cccout << cc << "也" << bb << endl;system("pause");return0;}

输出结果为:


请输入一个妹子的名字:阿木阿木很漂亮阿木真的很漂亮杨幂(人称大幂幂)是一个明星。杨幂(人称大幂幂)也很漂亮

在连续相加的时候:

aa += dd; //将变量dd加到变量aa的字符串后面

aa += bb; //再将变量bb加到变量aa的字符串后面

也可以直接通过这样的一行代码来起到相同的效果:

aa += dd += bb;

 

经过实际测试,两者效果是等效的。

 

注意:

①string类有自动调节字符串长度的功能。例如变量aa初始长度为0,在用户输入进行赋值后,字符串为4个字节(两个汉字),其后进行两次string变量相加,长度变为20个字节,然后又在之后进行赋值,长度变成18个字节(7个汉字2个括号每个占2个字节)。注意,sizeof 变量名是无法测出string类变量所占空间的,他是动态分配的。

要想测试变量所占空间,需要通过 变量名.size() 这样的方法来进行。如 string aa;cout << aa.size()<< endl; 就是输出string变量aa的长度,结果为0。注意,这种方法不计算最后的空白符

②如果不是string类,而是C-风格的字符串。

可以使用strcat(目标字符串A,字符串B)来将字符串B的内容复制到字符串A的后面;

另外是strcpy(目标字符串A,字符串B)可以将字符串B全部复制到(即理解为赋值)到目标字符串A之中。

但两个存在的问题是可能因为长度超出,而导致数据损坏等问题。

 

在C函数库里,则是strncpy()和strncat()——多了一个n,并且这两个函数支持指出目标数组的最大允许长度的第三个参数,因此更为安全(避免因数据溢出而导致数据损坏),但增加了程序输入的复杂度。

 

总之,还是用string类好。

 

显示字符串的字符数:

在显示字符串的的字符数时,string类的字符串和C-风格的字符串的方法是不同的。注意, 显示字符数 和 显示字符串长度 是不一样的,后者比前者多一个空字符。

①string类显示字符串的字符数的方法如下:变量名.size()。例如 cout << aa.size() << endl;//显示string类字符串的字符数,不包含末尾空字符,但包含空格字符

②显示C-风格的字符串的字符数的方法如下:strlen(变量名)。例如:

char aaa[5] = "abcd";cout << strlen(aaa) << endl;//显示C-风格字符串的字符数cout << sizeof(aaa) << endl;//显示C-风格字符串的字符长度,包含结尾空字符


输出的结果分别为:4和5



0 0
原创粉丝点击