哈喽大家好,这里是小二电路。关注我,每天给你不一样的精彩。

欢迎大家关注小编公众号:小二电路

今天呢不再是电路学习了,哈哈。但是还是和学习脱不开关系呀。笑死

今天主要就是和大家分享一下,“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—

编写:小二电路

“char”知多少。相关推荐

  1. 按键精灵开发者认证1-6题库

    这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...

  2. ch不是小写字母的c语言,已知字母a的ASCII码为97,若变量ch为char型,以下能正确判断出ch的值为小写字母的表达式是 答案:(ch-32)='A' ( ch-32)='Z'...

    相关问题 购物篮分析中,数据是以的形式呈现: 购物篮 分析 中 数据 形式 变量 对概念进行操作化加工,将它们变为可测量的变量,这一步骤属于: 概念 操作化 加工 变量 步骤 测量 过程 下面的流程图 ...

  3. char的初始值_java从入门到放弃 各种数组的初始值?

    byte 型数组元素默认初始值是 0 short 型数组元素的默认初始值是 0 int 型数组元素的默认初始值是 0 long 型数组元素的默认初始值是 0L char 型数组元素的默认初始值是 .u ...

  4. 已知小红今年12岁c语言编程,C语言程序设计第轮复习习题.doc

    C语言程序设计第轮复习习题 第1章 C语言概述.以下叙述正确的是 . A.在C程序中,main函数必须位于子程序的最前面 B.C程序的每一行中只能写一条语句 C.在对一个C程序进行编译的过程中,可发现 ...

  5. core java 9 代码_Java Core 学习笔记——3.char/Unicode/代码点/代码单元

    通用字符集(UCS) UCS是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所制定的标准字符集. UCS包括了其他所有的字符集(包含了已知语言的所以字符). ISO/IEC 1 ...

  6. char类型怎么输入 c语言_还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)...

    21ic综合自网络信息 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 为什么 ...

  7. 300万知乎多标签文本分类任务经验分享(附源码)

    来源:大数据挖掘DT数据分析 本文长度为4600字,建议阅读6分钟 本文为你分享知乎看山杯冠军团队参赛经验. 后台回复回复关键词"PT"即可获取源码(PyTorch实现)githu ...

  8. mysql必知必会看完看什么_《MySQL必知必会》读书笔记

    一.了解MySQL 1.什么是数据库? 数据库是一种以某种有组织的方式存储的数据集合. 2.模式(schema):关于数据库和表的布局及特性的信息. 3.列:正确的将数据分解为多个列极为重要.通过把它 ...

  9. 支持插件的消息中间件【msg broker with plugin】 - 知然 - 博客园

    支持插件的消息中间件[msg broker with plugin] - 知然 - 博客园 支持插件的消息中间件[msg broker with plugin] 支持插件的消息中间件 msg brok ...

最新文章

  1. jquery和原生js-ajax
  2. mysql的索引的区别_MYSQL索引区别
  3. 办公室30个经典赞美句子
  4. 安全中间件与应用服务间如用session
  5. extern c用法解析
  6. sql server 2005 sa登录失败解决方法
  7. C++中的指针与引用
  8. python mysql 遍历_Python自动化办公系列六(pdf文档处理)
  9. java附加属性_Java 9附加流
  10. tf.acos_带有Python示例的math.acos()方法
  11. [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]
  12. echarts 三环圆环_echarts实现环形进度图
  13. 国内外卫星数据查询地址
  14. word怎么把页面顺序倒过来_word设置倒序打印的方法
  15. risc-v gcc 编译 atomic 指令时产生 illegal operands 错误的解决办法
  16. 乔布斯:这九本书每个人都该读一读
  17. 陆丰市福山妈祖:四大天王
  18. GSR2501国产2.4G PA替代RFX2401C,AT2401C,RT201
  19. 一些RJS资源和演示入门教程
  20. android高德地图多个mark点击,Android ---------高德卫星地图绘制多个点和点的点击事件自定义弹窗...

热门文章

  1. 2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解
  2. netstat -ano命令失效怎么办
  3. 都2022年了相册分类还如此不准?不如试试亲影
  4. UE4角色受击动画,随机播放音效
  5. vscode win10笔记本 蓝屏_win10蓝屏错误代码大全详解
  6. 改变窗口最大化的尺寸
  7. 从360遇上苹果说起
  8. 计算机ping 的快捷键,Ping命令使用小技巧
  9. html 多行注释的写法,web前端:JavaScript单行与多行注释书写格式
  10. java计算机毕业设计基于安卓Android/微信小程序的大学生签到管理系统APP