【从零开始学c++】4.char数组和string的千丝万缕
目录
1.char数组:
char的赋值方法:
char数组的赋值方法:
ASCLL码:
char类函数:需包含头文件
2.stirng:
3.对char数组的输入:
1.cin:
2.cin.etline():
3.cin.get():
cin.getline()与cin.get():
4.对string的输入:
1.cin:跟上文char数组一样,遇到空格会(\0)停止,就不讲了。
2.getline():注意,这边时直接使用getline(),而不是以cin的类成员来使用。
5.细讲string:
1.内存智能:
2.使用智能:
string拼接:
原始字符串(raw):
超大分量,放心食用!
1.char数组:
char数组是一种很好的数组实例,可做为低级的string,也可以作为小游戏的像素。
char的赋值方法:
首先,我们要知道char类型的赋值方法:
char a='a';
char的形式为字符,因此赋值时要加上单引号(')。
char数组的赋值方法:
如果要给char数组赋值,将是这样:
char a[5]={'a','b','c','d','e'};
这样做十分的麻烦,要用上大量的单引号和逗号,其实我们可以把它当作string来使用,直接用双引号来赋值:
char a[5]="abcde";//和上面的代码是一样的
怎么样?是不是快多了?
也可以用之前(【从零开始学c++】3.复合类型(数组)_湿布的博客-CSDN博客)那样让编译器计算元素个数(不加索引),即
char a[]="abcde";//和上面的代码是一样的
ASCLL码:
ASCLL码以斜杠(\)开头,可做字符,也可做键码(键码这东西以后再说)。
每个字符都对应一个ASCLL码,如:'A'对应的是/65,空字符则是/0。
因此,我们甚至可以用ASCLL码来代替字符。看!:
int a=65;cout<<(char)a;
首先定义了一个数字变量,当输出时强制转换为char型。因此,从ASCLL码表中查找/65,就是'A'。
因此,这同时也说明了char类型只能是字符('a'),不能是字符串("a"):
'S' "S" 符号区别: (')+(') (")+(") 类型区别: 字符常量 字符串 组成: (\83) (\83)+(\0)
char类函数:需包含<cstring>头文件
1.strcpy():复制 需包含2个对象:1.复制的对象 2.复制的内容
#include<iostream> #include<cstring> using namespace std; int main() {char a[20]="anb";char b[20]="bnb";cout<<"复制前:"<<endl;cout<<"a:"<<a<<endl<<"b:"<<b<<endl;strcpy(a,b); cout<<"复制后:"<<endl;cout<<"a:"<<a<<endl<<"b:"<<b<<endl;}
2.strcat():附加 需包含2个对象:1.被附加的对象 2.附加的内容
#include<iostream> #include<cstring> using namespace std; int main() {char a[20]="anb";char b[20]="bnb";cout<<"复制前:"<<endl;cout<<"a:"<<a<<endl<<"b:"<<b<<endl;strcat(a,b); cout<<"复制后:"<<endl;cout<<"a:"<<a<<endl<<"b:"<<b<<endl;}
2.stirng:
1.要使用string类,要在程序中包含string类。可以使用std命名空间,也可以使用std::string。
你可以把string看成一个智能的char数组。举个例子:
char数组 string 内存有限 内存无限
3.对char数组的输入:
1.cin:
cin>>(变量名);
#include<iostream> using namespace std; int main() { char a[20]; cin>>a; cout<<a; }
我们如果用cin>>直接赋值,会发现输入的内容只有前一部分,空格后的部分并未输入!
cin有一个特性,就是当赋值时遇到了空格(\0),cin就会停止输入!如果我们将代码改改:
char a[20],b[20];cin>>a>>b;cout<<a<<endl<<b;
输入:DW DWAD a=DW b=DWAD
此时缓冲区内存在DW DWAD,cin将DW赋值给a,又在缓冲区发现了DWAD,于是又把DWAD赋值给了b。
因此我们不使用cin,因为它存在隐患。
2.cin.etline():
使用cin的类成员getline(),使用方法:
cin.getline(a,20);
cin.getline()包含2个参数,第一:char数组名,第二:数组元素数。
该函数最多只能读取(元素数-1)个元素数(就是20-1,19个),余下的空间要储存空字符(\0)。
因此,该语句将实现把输入内容赋值给数组a。
输入:DADA DADA 输出:DADA DADA
3.cin.get():
使用cin的类函数get(),使用方法与cin.etline()类似,解释参数的方式也相同。
但是!cin.get()不读取换行符!这意味什么?看!:
#include<iostream> using namespace std; int main() {char a[20];char b[20];cout<<"请输入:";cin.get(a,20);cin.get(b,20);cout<<"a:"<<a<<endl;cout<<"b:"<<b<<endl; }
我们会发现,还没输入b时,就已经跳过了。
解决办法:再调用一次
cin.get(a,20).get();
cin.getline()与cin.get():
名称: cin.getline() cin.get() 作用: 对字符数组的输入 对字符数组的输入 共同点: 1.都会换行 2.都是cin的类函数 区别1:优点 使用简单 检查错误简单 区别2:失效位 会设置失效位 不会设置失效位
4.对string的输入:
1.cin:跟上文char数组一样,遇到空格会(\0)停止,就不讲了。
2.getline():注意,这边时直接使用getline(),而不是以cin的类成员来使用。
使用方法:
1.getline(cin,(string名)):该函数会直接将输入的内容赋值给指定的string(a):
getline(cin,a);
2.getline(cin,(string名),'(某个字符)'):该函数与第一种不同,它会在输入的内容中查找指定的字符,然后在把前面的在赋值,与第一种相比,多了一个范围(指定的字符)。
#include <iostream> using namespace std; int main() {string a;getline(cin,a,' ');cout<<a; }
该函数会将输入的内容的空格前部分赋值给a。
个人感觉和cin挺像的,oh,效果应该是一模一样!
5.细讲string:
在前面我们曽讲到string是智能的char数组。那么相比char数组,string智能在哪?
1.内存智能:
名称: char数组 string 内存: 由索引决定内存 无限
2.使用智能:
虽然string本身就是char数组,但我们可以将string当作简单变量。
因此,我们也可以把char数组赋值给string:
#include <iostream> using namespace std; int main() {string a;char b[20]="DAW";a=b;cout<<a; }
但我们却不能把string赋值给char数组:
我们也可以像使用char数组那样对string使用索引:
#include <iostream> using namespace std; int main() {string a="oello(你好)";//定义cout<<a<<endl;//先输出a[0]='h';cout<<a;//更改第一个字符为‘h’再输出 }
但要注意的是:更改的必须是字符!原来是字符,更改后还是字符!
#include <iostream> using namespace std; int main() {string a="oello(你好)";//定义cout<<a<<endl;//先输出a[0]='h';cout<<a;//更改第一个字符为‘h’再输出 }
在a中,a[0]为字符('a'),所以才可以更改。
但如果更改的是字符串,就会变成随机的字符串:
#include <iostream> using namespace std; int main() {string a="oello(你好)";cout<<a<<endl; a[7]='h';cout<<a; }
因为a[7]是字符串("好"),因此a[7]的前一个元素a[6]("你")就会随机:
同时也潜在一个问题!string包含的的内容不只有char型!像上面的oello(你好)一样,你和好就不是char型!如果试图用string索引的方法输出,那么给你的就是一片空白:
#include <iostream> using namespace std; int main() {string a="oello(你好)";cout<<a[6]<<endl; }
真·一片空白:
string拼接:
string类可以对string进行拼接:使用+号:
#include <iostream> using namespace std; int main() {string a="oello(你好)";cout<<a<<endl;a+=" 我不好";cout<<a; }
该程序会先定义一个string,然后在末尾加上"我不好"。
原始字符串(raw):
输出什么就是什么,就算是转义序列(\n)在这你也就是"\n"。
以R为开头,用双引号和括号("()")包住, 双引号和括号就是定界符。
#include<iostream> #include<cstring> using namespace std; int main() {cout<<R"(输出\n)"; }
温馨提示:DEV C++无法使用raw原始字符串。 上面的代码是使用VS(Visual Studio)编译的。
都看到这了,就请您点一个免费的小红心和关注吧!
【从零开始学c++】4.char数组和string的千丝万缕相关推荐
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....转换
wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString.... #include <strin ...
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system(command)...
转载:http://blog.csdn.net/chocolateconanlan/article/details/4058868 wchar_t*,wchar_t,wchat_t数组,char,ch ...
- 在Java中将字符串转换为char数组,将char数组转换为String
Today we will learn how to convert String to a char array and then char array to String in Java. 今天, ...
- [C++]char转换为string ,固定长度的char数组转换为string
char转换为string 固定长度的char数组转换为string 使用socket编程时候,需要将受到的字符串数组转换为string,但是转换后的字符串总会附加一些,转义字符. 直接上code c ...
- delphi64位 char数组转换string中文乱码_使用位运算、值交换等方式反转java字符串-共四种方法...
在本文中,我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法. StringBuilder(str).reverse() char[]循环与值交换 byte循环与值交换 apa ...
- java char数组转string数组_Java中char数组(字符数组)与字符串String类型的转换方法...
本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordFie ...
- 为什么 char 数组比 String 更适合存储密码?
另一个基于 String 的棘手 Java 问题,相信我只有很少的 Java 程序员可以正确回答这个问题. 这是一个真正艰难的核心 Java 面试问题,并且需要对 String 的扎实知识才能回答这个 ...
- Java char转换为String,String转换为char数组
Today we will look into java char to String program. We will also learn how to convert String to a c ...
- Java中String与char数组相互转换
java中对string的操作很多时候不如对char[]操作的方便,所以介绍一些String字符串和char[]互换的方法: String直接转char[] 使用String.toCharArray( ...
最新文章
- linux数据库创建score表,MySQL数据库学习笔记
- vsftp安装与配置(通过虚拟用户登录)
- 一次SQLSERVER触发器编写感悟
- 百度ACE智能交通能提升最高30%城市通行效率,刚刚拿下世界互联网大会最高荣誉...
- MPU6050参考代码
- vs(visual studio)调试功能里各个按钮的意义及使用方法?
- js 操作select和option
- 说三件切身利益的大事!一定要看 减少损失
- 安卓开发第一个小程序HelloWorld
- 西安工业大学计算机专业好吗,西安工业大学(专业学位)计算机技术考研难吗
- Bootstrap---dateTimePicker时间控件配置与应用
- NM3200多用表校验仪
- #507 Wiggle Sort II
- 【寒江雪】Go实现命令模式
- GeoTools解析shape文件中文乱码
- 计算机右键菜单更换顺序,win10系统调整右键菜单选项顺序的恢复技巧
- 这里有五种身份证提取出生年月的格式
- 前端--HTML入门
- 平均值、标准差、相关系数、回归线及最小二乘法
- 基于Python的IT设备管理系统
热门文章
- 视频重建论文EDVR: Video Restoration with Enhanced Deformable Convolutional Networks阅读笔记
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值)
- Faiss(12):python接口faiss.py文件分析
- Three.js学习笔记---我和小伙伴都惊呆了
- HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
- 梅梅之最新设计——改了又改!!~~
- 基础进阶ODS、DWD、DWM等模型分层与项目实战
- 用Python微信机器人、查看微信好友比例、好友地域分布
- 欢乐颂之鸿蒙系统,杨烁现实中的老婆 小包总抱得美人归
- STM32 看门狗详解