[ C++ ] — 字符串

[ C++ ] — 字符串,第1张

[ C++ ] — 字符 一、C风格字符串 1、特点
  • 以空字符结尾
  • 空字符:, 其ASCII码为0,用来标记字符串的结尾
  • 在确定存储字符串所需的最短数组时,别忘了将结尾的 计算在内

使用截断字符

char name[15]="C++Boy";
name[3]='';
cout< 

输出:C++

2、初始化 (1)单个字符的char数组
char dog[8] = {'f','a','e','s', 's', 'a',''};
char cat[8] = {'b','e','a','u', 'x', ' ','T'};

其中,dog是字符串,cat不是。
注意:用以上方式定义一个字符串时,记得要给留一个元素的空间。

(2)字符串常量
char bird[11] = "Mr. Cheeps";
char fish[] = "Bubbles";
char firstName[]={"John"};

这种字符串被称为字符串常量
用引号括起来的字符串隐式地包括结尾的空字符

3、字符常量和字符串常量
  • 'S'是字符常量,再ASCII系统上,‘S’ 只是83的另一种写法。char c='S';这一句是将83赋给c
  • "S"是字符串常量,他表示 S 和 组成的字符串。 "S"表示的是字符串所在的地址,所以char str="S";表示将一个内存地址赋给str。
4、拼接字符串常量
cout<<"I want to " "be a doctor";
cout<<"I want to be a doctor";

两句的输出等效,第一句中,第一个字符串中的即将被第二个字符串的第一个字符取代。

5、获取字符串的长度
  • sizeof: 指出整个数组的长度
  • strlen():strlen(str)返回存储在数组中的字符串的长度(确定字符串中的字符数)。但strlen()只计算可见字符,所以存储字符串str时,数组的长度不能小于strlen(str)+1。
6、字符串的输入

使用键盘输入,将字符串读入char数组时,将自动加上结尾的空字符。

(1)cin

cin使用空白(空格、制表符、换行符)来确定字符串结束的位置

char name[20];
char dessert[20];

cout <<"Enter your name: n";
cin>>name;
cout<<"Enter your favorite dessert: n";
cin>>dessert;
cout<<"name: "< 

当输入为John Smith时,程序将直接显示内容为name: John, dessert: Smith
因为cin将空格识别为一个结束位置,则Smith将作为第二个cin的输入。

  • cin会将回车键换行符留在了输入队列中
(2)cin.getline()

cin.getline(str,count)
包含两个参数

  • 第一个参数是数组名
  • 第二个参数是要读取的字符数

如果count=20,则最多读取19个字符,余下的空间存。当输入的字符比指定的多,时,getline()和get()将会将余下的字符留在输入队列里。
getline()在读取指定数目的字符或遇到换行符时停止,但不保存换行符。

	char name[20];
	char gender[5];

	cin.getline(name,20);
	cin.getline(gender,5);

等效于

	char name[20];
	char gender[5];

	cin.getline(name,20).getline(gender,5);

cin.getline()返回cin

(2)cin.get()

cin.get()有几种变体,其中一种与cin.getline()很相似,唯一的不同是cin.get()保存换行符。
当有两个连续的输入时,

	char name[20];
	char gender[5];

	cin.get(name,20);
	cin.get(gender,5);
	cout << name << endl << gender;

第一次调用后,换行符留在输入队列中。因此第二次调用时看到第一个字符便是换行符,输入结束。
所以当用户输入完name,并按下回车时,程序即结束,只输出name

cin.get()还可以不带任何参数cin.get()

	char name[20];
	char gender[5];

	cin.get(name,20);
	cin.get();
	cin.get(gender,5);
	cout << name << endl << gender;

这样将会避免上面的问题。
或改写成这样

cin.get(name,20).get();  //cin.get()返回一个cin
(4)混合使用
int year;
char address[20];

cout<<"Input the year: n";
cin>>year;
cout<<"Input the addres: n";
cin.getline(address,20);
cout<<"Year: "<输出:

Input the year:
1997
Input the addres:
Year: 1997, address:

cin将回车键换行符留在了输入队列中,cin.getline()看到换行符后,认为是一个空行,并将空字符赋给address。
可以这样写

(cin >> year).get();
7、其他 *** 作 (1)strcpy()

strcpy(str1,str2);
将str2复制到str1中

	char s1[] = "123";
	char s2[] = "45";
	strcpy(s1, s2);
	cout << s1;

输出是 45
但是当

	char s1[] = "123";
	char s2[] = "4567";
	strcpy(s1, s2);
	cout << s1;

字符串长度过长,编译器报错

(2)strcat()

strcat(str1,str2);
将str2加到str1后面

	char s1[7] = "123";
	char s2[4] = "456";
	strcat(s1, s2);
	cout << s1;

s1的空间设置为7刚好够大。复制过去后,s1的将不存在,整个字符串仅在最后保留一个。
如果空间不足以容纳两个字符串(包括一个),则程序将会报错并停止。

8、容易出错

(1)
在确定存储字符串所需的最短数组时,别忘了将结尾的 计算在内。
C风格的字符串永远要记得的存在!

char s1[3] = "123";

空间不够,报错
(2)

char str[20] = "123";
str = "456";

以下行为会报错:表达式必须是可修改的左值。因为str数组名,也就是一个字符串常量。

char a1[20]="123";
char a2[20]="456";
a1=ar2;

也是不允许的

char str[] = "123"+"456";

同样不可以
(3)

char str1[20]="123";
cin>>str1;
cout< 
char str2[20];
cin>>str2;

以上两种行为都是允许的。其中第一个的输出将是用户输入的值,即使用户输入的长度小于123,例如45,输出将为45。

二、String
  1. 必须包含string头文件#include ,string类位于std命名空间中,要std::string
  2. 可以用数组表示法访问存储在string中的字符str[2](string str=“1234”;)
1、初始化

未被初始化的string对象长度自动设为0

string str1="123";
string str2={"123"};
2、拼接
...
string str3=str1+str2;
3、确定字符串中的字符数
str.size();
4、键盘输入
getline(cin,str);
三、其它形式的字符串字面值
wchar_t titlr[]=L"Chief"; //用前缀L来表示
char16_t name[] =u"Felonia";//用前缀u来表示
char32_t car[]=U"Humber";//用前缀U来表示

原始字符串(raw)

  • 在原始字符串中,字符表示的就是自己,例如n不表示换行符,仅表示斜杠和n;
  • 原始字符串用"( 和 )"作为界定符;
  • 用R来表示原始字符串。
cout< 

输出

Jin "King" Tutt "n"

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存