C++ 细节记录 2

拼接字符串常量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 violinsit.\n"; cout << "I
摘要由CSDN通过智能技术生成

拼接字符串常量

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 violinsit.\n";
	cout << "I'd give my right ar"
        	"m to be a great violinist.\n";

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

getline(char *, int) 和 get(char *, int)

都是读取一行的输入

getline():

读取换行符,但随后将换行符丢弃,换成空字符。

该函数有两个参数。第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数。如果这个参数是20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符。

getline() 成员函数在读取指定数目的字符或遇到换行符时停止读取。

cin.getline(name1, ArSize);
cin.getline(name2, ArSize);

// or
cin.getline(name1, ArSize).getline(name2, ArSize);

**get(): **

不读取并丢弃换行符,而是将其留在输入队列中。如果连续两次调用 get() ,会导致下一次 get() 出现问题,可以用 cin.get() 来处理换行符

cin.get(name, ArSize);		// read first line
cin.get();					// read newline
cin.get(dessert,ArSize);	// read second line

也可以进行拼接

cin.get(name, ArSize).get();	// concatenate member functions
cin.get(dessert, ArSize).get();


// error
cin.get(name, ArSize).get().get(dessert, ArSize).get();

注意:

在使用 cin >> a; 后,也会将回车键生成的换行符留在输出队列,再使用 cin.getline() 时需要先使用 cin.get() 或 cin.get(ch) 处理换行符。

cin  >> a;
cin.get();		// or cin.get(ch);

// or
(cin >> a).get();	// or (cin >> a).get(ch);
// 利用表达式 cin >> a 返回 cin 对象,将调用拼接起来

空行和其他问题

当 get() (不是 getline() ) 读取空行后将设置失效位(failbit)。这意味着接下来的输入将被阻断,但可以用下面的命令来恢复输出。

cin.clear();

如果输入字符串可能比分配的空间长。如果输入行包括的字符数比指定的多,则 getline() 和 get() 将把余下的字符串留在输入队列中,而 getline() 还会设置失效位,并关闭后面的输入。

类设计让程序能够自动处理 string 的大小。例如,str1 的声明创建一个长度为 0 的 string 对象,但程序将输入读取到 str1 中时,将自动调整 str1 的长度。

cin >> str1;			// str1 resized to fit input

这使得与使用数组相比,使用 string 对象更方便,也更安全。从理论上说,可以将 char 数组视为一组用于存储一个字符串的 char 存储单元,而 string 类变量是一个表示字符串的实体。

string 类简介

使用 string 对象的方式与使用字符数组相同

  • 可以使用 C-风格字符串来初始化 string 对象
  • 可以使用 cin 来将键盘输入存储到 string 对象中
  • 可以使用 cout 来显示 string 对象
  • 可以使用数组表示法来访问存储在 string 对象中的字符

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

可以将 string 对象声明为简单变量,而不是数组:

string str1;				// create an empty string object
string str2 = "panther";	// create an initialized string

类设计让程序能够自动处理 string 的大小。例如,str1 的声明创建一个长度为0的 string 对象,但程序将输入读取到 str1 中时,将自动调整 str1 的长度:

cin  >> str1;				// str1 resized to fit input

这使得与使用数组相比,使用 string 对象更方便,也更安全。从理论上说,可以将 char 数组视为一组用于存储一个字符串的 char 存储单元,而 string 类变量是一个表示字符串的实体。

C++11 字符串初始化

C++11 也允许将列表初始化用于 C-风格字符串和 string 对象:

char first_date[] = {"Le Chapon Dodu"};
char second_date[] = {"The Elegant Plate"};
string third_date[] = {"The Bread Bowl"};
string fourth_date[] = {"Hank's Fine Eats"};

赋值、拼接和附加

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

char charr1[20];				// cre
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值