字符:
1.每个常用英文字符都对应一个-128~127的一个数字。
2.char类型本质也是存储一个字节(数字),包括在计算过程中也是当做数字来看的,只有在呈现给用户的时候会转化为对应的字符。
3.字符用'',字符串用""。
字符串(本质上是字符数组):
字符数组:
1.字符串就是字符数组末尾+结束符\0 (\0的ASCII码值就是0)
字符数组是用来存储字符串的;字符数组的长度-字符串的长度=1;
实例辨析:
char a1[] = {'C','+','+'}; //这定义了一个字符数组,不是字符串。因为没有\0
char a2[] = {'C','+','+','\0'}; //这个确实定义了一个可称为字符串的字符数组。
char a3[] = "C++"; //这个定义了一个字符串(同样可以看到背后有一个末尾带\0的字符数组)
//注意sizeof 是求字符数组长度而非字符串长度
2.输入,输出
char str[100];
cin >> str; //cin(输入字符串的过程)中遇到 空格, 回车 就会停止
scanf("%s",str); //scanf()输出字符串时不用加&
cout << str <<endl; //cout(输出字符串的过程)中遇到 空格, 回车 不会停, 只有\0能叫停他
printf("%s\n",str); //字符数组记得用%s占位
对字符串的特定部分截断输出:
char a2[] ={'A','B','C','\0'};
cout << a2 << endl; //从第一个元素‘A’开始输出字符串
printf("%s\n",a2);
cout << a2 + 1 <<endl; //从第二个元素‘B’开始输出字符串
printf("%s\n",a2 + 1);
cout << a2 + 2 <<endl; //从第三个元素‘C’开始输出字符串
printf("%s\n",a2 + 2);
输入到数组的特定位置:
char s[100];
cin >> s + 2; //scanf("%s",s+2);等价。
cout << s + 2 << endl; //s[2]开始录入
注意!!!读入一行字符串:
无论是cin还是scanf(),遇到空格,回车,\0 就会停止。就算后面还在人为输入字符进去。
char s[100];
scanf("%s",s); //假设输入 abc def
cout << s << endl; //输出结果为 abc (没有def,因为被空格熔断了)
那么,如何读入包含空格的一整行元素呢?
2个方法,fgets()和getline()
//fgets()
char s[100];
fgets(s,100,stdin); //s代表操作的数组变量名,100代表对数组进行最多进行多少次读入(进位的),stdin是文件名(固定)
//getline()
string s;
getline(cin,s); //getline 不能接受数组,只处理字符串(在形式上)
//cin.getline() 既用到了cin,又用到getline,使得getline可以处理数组(形式上)
char s[100];
cin.getline(s,100)//先写cin命令,然后写最多重复100次
//puts()
//puts()函数专门处理字符串的输出
//等价于printf("%s",s);
//要注意:
//#include <cstdio>