字符串

字符串

字符串
字符串

【C++】字符串及基本操作

C++处理字符串的方式有两种:C-风格字符串;string类库的方法。
存储在连续字节中的一系列字符意味着可以将字符串存储在char数组中,每个字符都位于自己的数组元素中。
C-风格字符串以空字符null结尾,被写作\0,用来标记字符串的结尾。

char greeting [6] = {'H', 'e', 'l', 'l', 'o', 'i'};
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 这两个数组都是char数组,但只有第二个数组是字符串。空字符对于C-style字符串至关重要。
char greeting[] = "Hello";   这种字符串被称为字符串常量

字符串常量(使用双引号)不能与字符常量(使用单引号)互换。

char shirt_size = 'S';
char shirt_size = "S"; "S"表示的是字符S和\0,“S”实际上表示的是字符串所在的内存地址,
这句话试图将一个内存地址赋给shirt_size,是不合法的。

将数组初始化为字符串的工作比较麻烦,使用大量的单引号,且必须记住加上空字符。有一种更好的将字符数组初始化为字符串的方法,只需要使用一个引号括起来的字符串即可,这种字符串被称为字符串常量(string constant)或字符串字面值。

char bird [11] = "Ms. Cheeps";
char fish [] = "Bubbles";

用引号括起的字符串隐式地包括结尾的空字符,因此不用显示地包括它
在数组中使用字符串常量:最常用的两种方法,将数组初始化为字符串常量、将键盘或文件输入读入到数组中。
sizeof运算符指出整个数组的长度,strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。
strlen()只计算可见的字符,不把空字符计算在内。如basic返回是5而不是6。
拼接字符串常量:将两个用引号括起的字符串合并为一个。拼接时不会在被连接的字符串之间添加空格,第二个字符串的第一个字符紧跟在第一个字符串的最后一个字符后面,第一个字符串中的\0字符将被第二个字符串的第一个字符取代。

字符串输入

每次读取一行字符串输入:istream中的类提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。getline()将丢弃换行符,get()将换行符保留在输入序列中。
getline():读取整行,通过回车键输入换行符来确定输入结尾。调用方法为cin.getline(),该函数有两个参数,第一个参数用来存储输入行的数组的名称,第二个参数是要读取的字符数。若参数为20,函数最多读取19个字符。该函数在读取指定数目的字符或遇到换行符时停止读取。getline()函数每次读取一行,它通过换行符来确定行尾,但不保存换行符。在存储字符串时,它用空字符来替换换行符。
get():get()成员函数位于istream类中,该函数有几种变体,其中一种与getline()类似,它们接受的参数相同,解释参数的方式也相同,并且都读取到行尾。但get()并不再读取并丢弃换行符,而是将其留在输入队列中。
get()另一种变体,使用不带任何参数的cin.get()调用可读取下一个字符,即使是换行符,因此可以用它处理换行符。

string类简介

可以用string类型的变量而不是字符数组来存储字符串,string类型使用起来比数组简单,同时提供了将字符串作为一种数据类型的表示方法。
要使用string类,必须在程序中包含头文件string,string位于名称空间std中,因此必须提供一条using编译指令,或者使用std::string来引用它。string类定义隐藏了字符串的数组性质。
在很多方面,使用string对象的方式与使用字符数组相同:
1.可以使用C-风格字符串来初始化string对象;

char firsr_data [] = {"Le chap"};
string third_data = {"The bread"'};

2.可以使用cin来将键盘输入存储到string对象中;
3.可以使用cout来显示string对象;
4.可以使用数组表示法来访问存储在string对象中的字符。
string对象与字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组。如,string str1;
不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象
string类简化了字符串合并操作,可以使用+将两个string对象合并在一起,可以使用+=将字符串加到string对象末尾。
确定字符串中字符数的方法

int len1 = str1.size();
int len2 = strlen(charr1);

函数strlen()是一个常规函数,它接受一个C风格字符串作为参数,并返回该字符串包含的字符数。函数size()中,str1不是被用作函数参数,str1是一个string对象,size()是string类的一个方法。

  • string类的I/O
    可以使用cin和<<将输入存储到string对象,使用cout和<<来显示string对象,句法与C风格字符串相同,但每次读取一行而不是一个单词时使用句法不同。
将一行输入读取到数组中
cin.getline (charr,20);

这种句点表示法表明,函数getline()是istream类的一个类方法,第一个参数是目标数组,第二个参数是数组长度。

将一行输入读取到string对象
getline (cin,str);

没有句点表示,表明getline()不是类方法。它将cin作为参数,指出到哪里去查找输入。没有指出字符串长度,string对象根据字符串的长度自动调整大小。

string类提供了一系列针对字符串的操作,比如:

  1. append() – 在字符串的末尾添加字符
  2. find() – 在字符串中查找字符串
  3. insert() – 插入字符
  4. length() – 返回字符串的长度
  5. replace() – 替换字符串
  6. substr() – 返回某个子字符串

字符串数组
不仅可以用string定义字符串变量,也可以用string定义字符串数组。如
string name[5]; //定义一个字符串数组,它包含5个字符串元素
string name[5]={″Zhang″,″Li″,″Fun″,″Wang″,″Tan″};
//定义一个字符串数组并初始化
此时name数组的状况如图5.11所示。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值