目录

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的千丝万缕相关推荐

  1. 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 ...

  2. 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 ...

  3. 在Java中将字符串转换为char数组,将char数组转换为String

    Today we will learn how to convert String to a char array and then char array to String in Java. 今天, ...

  4. [C++]char转换为string ,固定长度的char数组转换为string

    char转换为string 固定长度的char数组转换为string 使用socket编程时候,需要将受到的字符串数组转换为string,但是转换后的字符串总会附加一些,转义字符. 直接上code c ...

  5. delphi64位 char数组转换string中文乱码_使用位运算、值交换等方式反转java字符串-共四种方法...

    在本文中,我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法. StringBuilder(str).reverse() char[]循环与值交换 byte循环与值交换 apa ...

  6. java char数组转string数组_Java中char数组(字符数组)与字符串String类型的转换方法...

    本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordFie ...

  7. 为什么 char 数组比 String 更适合存储密码?

    另一个基于 String 的棘手 Java 问题,相信我只有很少的 Java 程序员可以正确回答这个问题. 这是一个真正艰难的核心 Java 面试问题,并且需要对 String 的扎实知识才能回答这个 ...

  8. 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 ...

  9. Java中String与char数组相互转换

    java中对string的操作很多时候不如对char[]操作的方便,所以介绍一些String字符串和char[]互换的方法: String直接转char[] 使用String.toCharArray( ...

最新文章

  1. linux数据库创建score表,MySQL数据库学习笔记
  2. vsftp安装与配置(通过虚拟用户登录)
  3. 一次SQLSERVER触发器编写感悟
  4. 百度ACE智能交通能提升最高30%城市通行效率,刚刚拿下世界互联网大会最高荣誉...
  5. MPU6050参考代码
  6. vs(visual studio)调试功能里各个按钮的意义及使用方法?
  7. js 操作select和option
  8. 说三件切身利益的大事!一定要看 减少损失
  9. 安卓开发第一个小程序HelloWorld
  10. 西安工业大学计算机专业好吗,西安工业大学(专业学位)计算机技术考研难吗
  11. Bootstrap---dateTimePicker时间控件配置与应用
  12. NM3200多用表校验仪
  13. #507 Wiggle Sort II
  14. 【寒江雪】Go实现命令模式
  15. GeoTools解析shape文件中文乱码
  16. 计算机右键菜单更换顺序,win10系统调整右键菜单选项顺序的恢复技巧
  17. 这里有五种身份证提取出生年月的格式
  18. 前端--HTML入门
  19. 平均值、标准差、相关系数、回归线及最小二乘法
  20. 基于Python的IT设备管理系统

热门文章

  1. 视频重建论文EDVR: Video Restoration with Enhanced Deformable Convolutional Networks阅读笔记
  2. 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值)
  3. Faiss(12):python接口faiss.py文件分析
  4. Three.js学习笔记---我和小伙伴都惊呆了
  5. HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
  6. 梅梅之最新设计——改了又改!!~~
  7. 基础进阶ODS、DWD、DWM等模型分层与项目实战
  8. 用Python微信机器人、查看微信好友比例、好友地域分布
  9. 欢乐颂之鸿蒙系统,杨烁现实中的老婆 小包总抱得美人归
  10. STM32 看门狗详解