IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【从零开始学c++】char数组和string的千丝万缕 -> 正文阅读

[C++知识库]【从零开始学c++】char数组和string的千丝万缕

?超大分量,放心食用!

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";//和上面的代码是一样的

怎么样?是不是快多了?

也可以用之前(https://blog.csdn.net/m0_54672684/article/details/119299417)那样让编译器计算元素个数(不加索引),即

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 DWADcinDW赋值给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++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:09:10  更:2021-08-05 17:09:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 11:37:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码