c++ char字符数组及其相关函数基础使用和说明

 char字符数组常见定义方式

char a[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char a[6]={"hello"};
char a[]={"hello"};
char a[] = "Hello";
//还有一种是用八进制或十六进制代表其ASCII码指代的字符

 char类字符串以'\0'结尾 ,最多能储存的字符个数=字符串长度-1('\0');

 

思考

如果写成以下这样,会出现什么情况?为什么?有没有风险?

char a[5] = {'H', 'e', 'l', 'l', 'o'};
char b[] = {'H', 'e', 'l', 'l', 'o'};
cout<<a<<endl;
cout<<b;

 

字符数组全部初始化

初始化为NULL即'\0'(空字符)(空字符不是space空格字符,空字符的ASCII码是0,ASCII名称是NULL;空格字符的ASCII码是32,ASCII名称是SP)

int a[100]={0};//这里的0不是'0'字符,不要混淆

部分初始化

 

计算字符数组本身的长度

sizeof()函数

样例

char a[100]="hello";
char b[100]={0};
char c[]="hello";
char d[]={'h','e','l','l','\0'};
char e[]={'h','e','l','l'};
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
cout<<sizeof(c)<<endl;
cout<<sizeof(d)<<endl;
cout<<sizeof(e)<<endl;

输出

10
10
6
5
4

 

计算字符串的长度

方法一

strlen函数

char a[100]="hello";
int len1=strlen(a);//strlen函数有返回值
int len2=strlen("hello");
cout<<len1<<endl;
cout<<len2<<endl;
cout<<strlen("hello"); 

输出结果为

5
5
5

 

strlen仅仅是一个计数器的功能,遇到空字符串'\0'则停止计算,strlen返回第一个'\0\之前的字符长度;

strlen只计算可见的字符,而不把空字符计算在内;

strlen()函数返回的是储存在数组中的字符串的长度,而不是数组本身的长度;

什么是可见字符

在ASCII码表中,算上空格, 从32到126共95个是可见字符,不算上空格则为94个。也叫打印字符,即可以被直接打印出来的字符。剩下的则是不可见字符,即不可以被直接打印出来。

方法二

for循环

char a[100]="hello";
int len=0;
for(;a[i]!='\0';len++){
}
cout<<len;

输出结果为

5

 

输入

cin

说明


cin输入时遇到空格时则终止读取;

cin会过滤掉不可见字符(如空格、回车、tab等)。

例如

char a[100]
cin>>a;

输入样例

awdfef fef4
dwa54f4e64f
5rg4rg1 e5f464g
fef 5r4gf  f gr grg 


输出样例

awdfef
dwa54f4e64f
5rg4rg1
fef

 

输出

方法一

char a[100]="hello";
cout<<a;


方法二

char a[100]="hello";
int len=strlen(a);
for(int i=0;i<len;i++)
cout<<a[i];

 

cin.getline()

说明

getline()读取一行输入,遇到空格字符时不会忽略,只有遇到换行符才会返回并丢弃换行符

用法

cin.getline(char字符数组名,需要输入的最大字符长度);

样例

int a[100];
cin.getline(a,100);//最多输入99个字符,即(0,99);
cout<<a;

输入

awdfef fef4
dwa54f4e64f
5rg4rg1 e5f464g
fef 5r4gf  f gr grg 

输出

awdfef fef4
dwa54f4e64f
5rg4rg1 e5f464g
fef 5r4gf  f gr grg 

 

cin.get()
说明

get()读取一行输入,不忽略空格字符,直到到达换行符。get()将换行符保留在输入序列中

效果展示

int n=3;
while(n--)
{
	char a[100];
	cin.get(a,100)//最多输入99个字符,即(0,99);
	cout<<a<<endl;
}

输入一组字符串,回车

hello world \\回车

输出

那么为什么只输入一组字符串,循环就结束了呢?

get()将换行符'\n'保留在输入序列中,第二次循环时cin.get()看到换行符后,将认为是一个空行,并将空字符串赋给a数组。

解决方法是在读取地址之前先读取并丢弃换行符,可以使用没有参数的cin.get();

方法一

样例

int n=3;
while(n--)
{
	char a[100];
	cin.get(a,100);
	cin.get();
	cout<<a<<endl;
}

输入

hello world \\回车

输出

方法二

int n=3;
while(n--)
{
	char a[100];
	char ch='\n';
	cin.get(a,100);
	cin.get(ch);
	cout<<a<<endl;
}

效果和上面一样

思考

如果写成以下这样,会出现什么情况?为什么?怎么解决?

int n=3;
while(n--)
{
	char a[100];
	char b[100];
	cin>>a;
	cin.get(b,100);
	cout<<a<<endl;
	cout<<b<<endl;
}

提醒:当cin读取数组a时,将回车键生成的换行符留在输入队列中,解决方案参考上一个例子

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值