哈喽大家好,这里是小二电路。关注我,每天给你不一样的精彩。
欢迎大家关注小编公众号:小二电路
今天呢不再是电路学习了,哈哈。但是还是和学习脱不开关系呀。笑死
今天主要就是和大家分享一下,“char”的知识。
想必大家都学过C语言,还有的学过C++,那么学过之后当某一天去机房做上机实验,发现有一个要用到字符串知识的题目,一时脑子里都是关于字符、字符串的严重模糊知识点,让你无法下手敲代码。
今天算你走运,我总结了C++里的关于“char”的那些知识点,全是干货,希望大家能够坚持看完,看完之后你就会“哦,原来是这样的啊”。
首先介绍的就是最简单的“字符”。
1、定义、输出字符。
char ch;
ch是char类型下定义的变量。
cin>>ch;
提示用户输入一个字符,可以使字母也可以使数字或者其他你在键盘上可以敲出来的奇怪字符。
cout<<ch;
输出刚刚你输入的字符。
可以这样:
char ch='M';
cout<<ch;
这样:
cout<<'M';
还可以这样:
cout.put(ch);
这个是调用了函数put输出字符。常用的形式可以和cout<<'M';一样,比如:
cout.put('M');
如果要是输出'M',对应的ASCII值,则:
int i=ch;
cout<<i;
结果是77。
即可。因为虽然我们输入的是M给了ch,但是编译系统是把77给了ch,输出的时候cout将77转换成了M,所以i=ch,可以进行正常赋值运算,不会出错。
所以只要是字符(单字符)就得用单引号'',只有字符串才会用到双引号""。
重头戏来了,字符串才是实际上我们用到的最多的,
所以,知识点也就比较多。
2、搞定字符串
①:
可想而知,许多个字符组成在一块就是字符串,
但是有个东西最为特殊
就是烦人的“空格”,
下面具体说到。
char dog[4]={'d','o','g'};
char cat[4]={'c','a','t','\0'};
如这两句代码所示,这是一般的字符串初始化,用的是字符串数组来定义的。
这两个输出如果按照我们想的,
输出应该是"dog"和"cat"是吧。
但是,第一句错了,第二句可以。
因为字符串数组定义时,必须得像第二个数组一样,
加上'\0',记住,这是规定。
但是,话又说回来,
正经人谁会用这种方法啊!!!
多麻烦了这,
我们都是这样的。
char dog[11]="Helloworld";
char cat[]="nihao";
[]里的数字也得保证你后面所有字符加起来要小于它,
为什么?
就是为了给'\0'六个位置,
上面的引号定义,
隐式地包括了空字符,就是'\0'。
这一点很重要。
顺便提一句,dog[2]知道是什么吧,
dog字符串里的第三个字符。
②:
char arry="s";
猜猜这个又是什么。
"s",也是字符串,包括了'\0'。
③:
用字符串,难免会用到两个头文件,
#include<string>
#include<cstring>
cstring是C++里的标准头文件声明格式,C语言里是string.h
那string也是什么鬼?
这个是另一种定义字符串的方法,看后面。
④:
char name[20];
char food[20];
cin>>name;
cin>>food;
cout<<"name:"<<name<<endl;
cout<<"food:"<<food;
这个程序,语句没问题,
运行完时,如果我输入Smisth Bob,然后按Enter键,
你猜会怎么样,
直接就结束了,
输出的是:
name:Smisth
food:Bob。
我们还没来得及输入food呢,就结束了。
虽然语句没问题,但是语法规则出问题了,
在C++的编译系统里,
cin提示用户输入,会自动把空格当成一个字符串的结尾,
那Bob就会被计算机误认为存储到food里,
所以就会出现这样的结果。
办法总比困难多,
我们可以采用istream里自带的函数,
getline()和get()。
⑤:
char name[20];
cin.getline(name,20);
这样我们就可以放心地输入字符串了,有空格也不怕。
或者
char name[20];
cin.get(name,20);
cin.get();
或者
char name[20];
cin.get(name,20).get();
是不是感觉get()函数用起来,感觉好奇怪。
是的,没错。
因为get()函数也是犯了和
cin>>name;
一样的毛病,所以用另个get()函数,
我理解的就是用空get(),去吸收了你可能输入的那个空格,
防止出现了,只输入一次就运行结束的问题。
这两个函数有一个共同点:都是读取一行的输入,直到换行符,
不同点就是,getline()会舍弃换行符而get()则保留。
那么,我们在输入两个外国友人名字时,中间有空格,便可这样写,
cin.get(name1,20).get();
cin.get(name2,20);
或者
cin.get(name1,20);
cin.get();
cin.get(name2,20);
3、摸透string类
string类也可以处理字符串的强大类文件,
都看到这里了,大家再坚持坚持,就快结束了。
#include<iostream>
#include<string>
int main()
{
using namespace std;
string str1;
cin>>str1;
cout<<str1;
}
这就是一个简单的,提示用户输入和输出的程序语句,
我们输入jack,输出也是jack。
更厉害的是,string类还支持字符串的赋值,加法拼接。
char ch[20]="jack";
string str1="jon";
string str2;
str1=ch; //这是不对的,两个不一样的类不能相互赋值
str2=str1;
str2=str1+str2;
除了第四句是错误的,其他都是对的,
拼接在一块的字符串,我们看到的也是连在一块的整体。
同样,如果输入的是中间有空格的字符串,
又该怎么写语句呢,
看下面
string str1;
getline(cin,str1);
这个时候,cin被看做是一个参数,指出到哪去查找输入。
这样你就可以放心,大胆地输入字符串了。
我想说一句是什么呢,
定义结构体时,在main函数里直接初始化char的话,有空格,没问题,
但是,如果你写的是让用户输入的程序,
那不好意思,不能出现空格。
但是我们可以定义一个结构体的指针变量,使用new创建动态结构,比如
struct inflable
{
char name[20];
};
int main()
{
inflable *p1=new inflable;
cin.get(p1->name,20);
}
这样你就可以安心输入字符串了。
好了,今天的内容到这里就结束了,虽然有点多,但是,看的话也很快,毕竟只有char这块的知识点,而且你还学过C\C++。
如果,我写的有什么错误的地方,也欢迎大家提出来,或者还有什么补充的也可以在评论区留言。
—END—
编写:小二电路