2022.09.21
人应该有力量,揪着自己的头发把自己从困境沼泽里拔出来。
关于C++中char类型的强调
本质:char类型的变量存储的数据仍然是一个整数,又char类型占用一个字节,即这个整数在0~127之间。每个取值代表一个字符,对应规则由ASCII表规定。
对于char类型变量赋值
不考虑严谨性,我们可以认为一个char类型变量只存一个字符,所以
- 赋数字(范围为一个字节)时对应ascll码的字符被赋给了这个变量。
#include<iostream>
using namespace std;
int main(){
char ch;
ch=65;
cout<<ch<<"\n";
return 0;
}
- 赋’字符’时如果输入多个字符,则发生覆盖,导致最后一位字符被存在变量里
#include<iostream>
using namespace std;
int main(){
char ch, a;
ch='abcd';
a='123';
cout<<ch<<"\n"<<a;
return 0;
}
对于char类型变量的流输入输出
默认以键盘(cin)输入的任何数值看作字符而不是数字处理(在变量的内存里以对于ascll码值的方式进行存储)所以只有第一位被赋给变量。
#include<iostream>
using namespace std;
int main(){
char ch;
cin>>ch;
cout<<ch;
return 0;
}
公孙川的 https://blog.youkuaiyun.com/qq_37500267/article/details/86160775,侵删
上面被丢弃的23仍存在于输入流
下面这个例子很好地展示了这个特性:
char n;
int s;
cin >> n >> s;
cout << n << endl << s;
当输入值为115时,输出结果为:
1
15
1
2
很明显,15被弃用在输入流中并随后被赋值给s(此时15被解释为数字了)。
示例 判断输入的单个数据是字母还是数字
#include<iostream>
using namespace std;
int main(){
char ch;
cin>>ch;
if(ch>='0'&&ch<='9') //ch的ascll值和0的ascll码值比较
cout<<"该字符为数字"<<endl;
else if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) //字符区分大小写
cout<<"该字符为字母"<<endl;
return 0;
}
思考:如何判断输入数据是数字还是字母?
当char类型变量遇到算术运算符和比较运算符时
关于C++运算符的分类
[https://blog.youkuaiyun.com/weixin_59654772/article/details/126086690]:
参考我是一颗卷心菜同学的总结
此时,char类型变量参与这样的运算,均视为字符的ascll值被运算!
最后cout会自己根据变量的类型判断变量存储的值代表的是字符还是数字。
#include<iostream>
using namespace std;
int main(){
char a = 33, b = 34, c;
int d = a + b;
c = a + b;
cout<<c<<" "<<d<<" "<<endl;
return 0;
}
示例分析
char a;
cin>>a;
cout<<a+32; //此时打印数字
char a;
cin>>a;
a=a+32;
cout<<a; //此时打印字符
cout<<a+32; //此时打印数字