- 以空字符结尾
- 空字符:, 其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、字符常量和字符串常量
用引号括起来的字符串隐式地包括结尾的空字符4、拼接字符串常量
- 'S'是字符常量,再ASCII系统上,‘S’ 只是83的另一种写法。char c='S';这一句是将83赋给c
- "S"是字符串常量,他表示 S 和 组成的字符串。 "S"表示的是字符串所在的地址,所以char str="S";表示将一个内存地址赋给str。
cout<<"I want to " "be a doctor"; cout<<"I want to be a doctor";两句的输出等效,第一句中,第一个字符串中的即将被第二个字符串的第一个字符取代。
5、获取字符串的长度6、字符串的输入
- sizeof: 指出整个数组的长度
- strlen():strlen(str)返回存储在数组中的字符串的长度(确定字符串中的字符数)。但strlen()只计算可见字符,所以存储字符串str时,数组的长度不能小于strlen(str)+1。
使用键盘输入,将字符串读入char数组时,将自动加上结尾的空字符。
(1)cincin使用空白(空格、制表符、换行符)来确定字符串结束的位置
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的输入。(2)cin.getline()
- cin会将回车键换行符留在了输入队列中
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,并按下回车时,程序即结束,只输出namecin.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。
二、String1、初始化
- 必须包含string头文件#include
,string类位于std命名空间中,要std::string - 可以用数组表示法访问存储在string中的字符str[2](string str=“1234”;)
未被初始化的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"欢迎分享,转载请注明来源:内存溢出
评论列表(0条)