string类概述[C++]

ISO/ANSI C++98标准通过添加string类扩展了C++库,可用string类型的变量(其实是对象)来代替字符数组存储字符串。

  • string类使用起来比数组简单,它提供将字符串作为一种数据类型的表示方法。
  • 要使用string类,必须在程序中包含头文件string。
  • string类位于名称空间std中,必须用using编译指令或者std::string来应用它。
  • string类定义隐藏了字符串的数组性质,使用户可以像处理普通变量一样处理字符串。

在很多方面,使用string对象的方式与使用字符串数组相同:

  • 可以使用C-风格字符串来初始化string对象。C-风格字符串具体请参考:C-风格字符串[C++]
  • 可以使用cin来将键盘输入存储到string对象中。
  • 可以使用cout来显示string对象。
  • 可以使用数组表示方法来访问存储在string对象中的字符。

string对象和字符数组的主要区别:

  • 可以将string对象声明为简单变量,而不是数组。
  • 类设计让程序能够自动处理string的大小。
  • 与使用数组相比,使用string对象更方便,更安全。
  • 可以将char数组视为一组用于存储一个字符串的char存储单元,而string类变量则是一个表示字符串的实体。
  • 不能将一个数组赋值给另一个数组,但可以将一个string对象赋值给另一个string对象。

1 string类字符串初始化、赋值和使用

C++1 1允许将列表初始化用于C-风格字符串和string类对象。

char firstData[] = {"xixihaha"};
char secondData[] {"xixihahahehe"};
string thirdData = {"ohhehehehe"};
string fourthData {"oheheiheihei"};

不能将一个数组赋值给另一个数组,但可以将一个string对象赋值给另一个string对象。

char char1[20];
char char2[20] = "hahahaha";
string str1;
string str2 = "hehehehe";
char1 = char2; //非法
str1 = str2;

可以使用运算符+将两个string对象合并起来。还可以使用运算符+=将字符串附加到string对象的末尾,相当于C-风格字符串的strcat(ch1, ch2)函数。

string str3;
str3 = str1 + str2;
str1 += str2;

也可以将C-风格字符串或string对象与string对象相加,或将它们附加到string对象的末尾。

处理string对象的语法通常比使用C字符串简单,比如:

str3 = str1 + str2;
//如果str1、str2、str3都是char数组,则需要以下步骤:
strcpy(str3, str1); //复制
strcat(str3, str2); //连接

使用字符数组处理时调用函数比较麻烦。

  • 目标数组过小而无法存储指定信息时,会覆盖临近内存,可能导致程序终止或数据损坏,而string类能自动调整大小。
  • 为了安全,C函数库提供与strcat()和strcpy()类似的函数strncat()和strncpy(),接受目标数组最大允许长度的第三个参数。

strlen()函数接受一个C风格字符串作为参数,并返回该字符串的字符数。string类函数的size()函数与此功能相同。

int len1 = str1.size(); //str1为string类对象
int len2 = strlen(cahr1); //char1为char数组

2 string类I/O

像C-风格字符串一样,string类对象可以使用cin和cout。

只是在面向行输入时,string类使用的句法不同。

调用格式一:getline(cin, str);

调用格式二:getline(cin, str, charEnd); //第三个为分界符,默认为换行符

  • 和C风格字符串不同,这里的getline()不是类方法函数,它将cin作为参数。
  • 该函数没有指出字符串长度,因为string对象根据字符串长度自动调整自己的大小。
  • 之所以不同,是因为istream类比string类出现早,其中没有处理string类对象的行输入方法。
  • cin和cout通用,在string中使用的是string对象的友元函数。

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫道绝缘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值