“21天养成好习惯”第一期-20

12 篇文章 0 订阅
"本文详细介绍了C++中的字符串处理,包括C风格字符串的特性,如以空字符``结尾,以及如何通过字符串常量初始化字符数组。此外,还讲解了字符串拼接、在数组中存储字符串的方法,并提供了一个示例程序展示输入输出及字符串长度的计算。注意,字符串常量不能与字符常量互换,且在定义数组时要考虑空字符的空间。"
摘要由CSDN通过智能技术生成

C++心得笔记


C++ Primer Plus 第四章 复合类型 

4.2        字符串

        字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种。第一种是来自C语言,常被称为C风格字符串(C-style string)。

        C风格字符串具有一种特殊的性质:以空子符(null character)结尾,空字符被写作\0,其ASCLL码为0,用来标记字符串的结尾。例如:

char cat[8] = {'f', 'a', 't', 'e', 's', 'a', '\0'};    //  a string
char dog[8] = {'b', 'e', 'a', 'u', 'x', ' ', 'I', 'I'};    //  not a string

        空字符对C风格字符串而言至关重要,例如,C++有很多处理字符串的函数,其中包括cout 使用的那些函数. 它们都逐个地处理字符串中的字符,直到到达空字符为止。 例如,若使用cout显示上面的dog数组(他不是字符串),cout将打印出数组中的8个字母,并接着将内存中的随后的各个字节解释为要打印的字符,直到遇到空字符为止。

         除了上面那种使用大量单引号的方式,还有一种更好的、将字符数组初始化为字符串的方法——只需要使用一个用引号括起的字符串即可,这种字符串被称为字符串常量(string constant)或字符串字面值(string literal),如下所示:

char bird[11] = ”MR.cheeps";    // the \0 is understand
char fish[] = "Bubbles;    // left the compiler count

         用引号括起的字符串隐式地包括结尾的空字符,因此不用显式地包括它。

        警告:在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。 

         注意字符串常量不能与字符常量互换。字符常量是(字符串编码的简写表示。在ASCLL系统上,‘S’只是83的另一种写法,因此,下面的语句将83赋给shirt_size:

char shirt_size = 'S';    // this is fine

但"S"不是字符常量,它表示的是两个字符(字符S和\0)组成的字符串。更糟糕的是,"S"实际上表示的是字符串所在的内存地址。因此下面的语句试图将一个内存地址赋给shirt_size:

char shirt_size = "S";    // illegal type mismatch

4.2.1        拼接字符串常量

       C++允许拼接字符串字面值,即将两个用引号括起的字符串合并为一个。事实上,任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。

        例如,下面的语句都是等效的。

cout << "I'd give my right arm to be" " a great violinist.\n";
cout << "I'd give my right arm to be a great violinst.\n";
cout << "I'd give my right ar"
"m to be a great violinist.\n";

        注意,拼接时不会在被连接的字符串之间添加空格,第二个字符串的第一字符将紧跟在第一个字符串的最后一个字符(不考虑\0)后面。第一个字符串的\0字符将被第二个字符串的第一个字符取代。

4.2.2        在数组中使用字符串

        要将字符串存储到数组中,最常用的方法有两种——将数组初始化成字符串常量、将键盘或文件输入读入到数组中。

        下面程序演示了这两种方法:

#include<iostream>
#include<cstring>	// for the strlen() function
int main()
{
	using namespace std;
	const int Size = 15;
	char name1[Size];
	char name2[Size] = "C++owboy";
	
	cout << "Howdy! I'm " << name2;
	cout << "! What's your name?\n";
	cin >> name1;
	cout << "Well, " << name1 << ", your name has ";
	cout << strlen(name1) << " letters and is stored\n";    //strlen()函数能读取字符串的常数
	cout << "in an array of " << sizeof(name1) << "bytes.\n";
	cout << "Your initial is " << name1[0] << ".\n";
	name2[3] = '\0';
	cout << "Here are the first 3 characters of  my name: ";
	cout << name2 << endl;
	return 0;
}

        程序输出:

 

该程序使用了符号常量来表示数组长度,当需要修改程序以使用不同的数组长度时,只需要在定义符号常量的地方进行修改即可。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值