C/C++,字符数组

这次我们主要讨论C中字符数组的用法,字符数组在我看来是数组里较难得一部分,下面我们来共同研究一下。
字符数组的定义:一定是 char 类型,后面的[]是能存储的字符个数
在定义的同时可以初始化,也可以在使用的时候逐个初始化。
定义时初始化 char str[10]={‘c’,‘h’,‘c’,‘i’‘n’,‘a’};
char s1[20]={“How do you do”};
char s1[20]=“How do you do”;
逐个元素赋值 str[0]=‘c’;str[1]=h’;str[2]=‘n’;str[3]=‘i’;str[4]=‘a’;

例题
James大学要举办校庆,在历届校友中寻找名字为James的校友。
要求:用二维的字符数组存储所有会员姓名,然后依次查找姓名中含有James的人,打印全名。
**程序思想:*假设每个人的名字长度都不超过20,这样我们可以根据James的长度len值是5,然后我们可以对所有人的姓名依次判断,他名字的前五个元素是不是和James相同,如果相同就说明这个校友的名字是James,否则就不是,可以根据这个思想,写出程序代码。
#include<sdio.h>
#include<stdlib.h>`
#include<string.h>
int main()
{
const int n=20,m=5; * //n=20说明字符的最长长度是20

char name[][n]= //可看出这个二维字符数组中第一维是缺省的,所以我们要根据初始化的字符串的个数定,这里一共有五个字符串,所以这个是行为5列为20的字符数组
{“Kate.Wate”,“James.Tan“,“Bull.Ben”,“Jimes.Tid”,“James.Ting”};
char James[]=“James”;
int i,j,len=strlen(“James”);
for (i=0;i<m;++i);
for(i=0;i<len;++i);
{
if(name[i][j]!=James[j])
break;
}
if(i==len)
printf(”%s has James\n",name[i]);
return 0;
}

字符数组的输入和输出
1.单个字符的输入输出
char str[10];
for(i=0;i<5;i++)
scanf("%c",&str[i]);
for(i=4;i>=0;i–)
printf("%c",str[i]);
2.字符串整体的输入输出
char str[10];
scanf("%s",str) //数组名str是数组的起始地址,所以不用&str
3.gets 函数
一般形式为
gets(字符数组名)
作用是从终端输入一个字符串到字符数组
gets(word) 用于键盘输入一个字符串,存储到word数组当中,该字符串由换行符(\n)以前的所有字符组成,系统也会自动为这个字符加上“|0”结束标
注意:gets中空格也作为输入字符的一部分,,而在scanf中,空格或者回车用来分隔多个字符串
4.puts函数
格式为 puts(字符数组名);
其作用是将一个字符串输出到终端,并在输出时将字符串结束标‘\0’转换成“\n‘,即输出完字符串后换行
char word[]=“abc”,word1[]=“def”
puts(word);
puts(word1);
输出结果后可发现这两个字符串自动换行

字符串处理函数
1.字符串连接函数strcat
调用形式:
strcat(字符数组1,字符数组2):
功能是将字符数组2连接于字符数组1的后面
注意:字符数组1的空间不仅要能够存储本身数据,也要能够存储字符数组2中的数据,不然就会发生链接错误
2.strcpy,字符串拷贝函数
调用形式:
strcpy(字符数组1,字符数组2);功能是将数组2拷贝到数组1中
例如: char str[20],str2[]=“name”;
strcpy(str1,str2);
printf("%s",str1);
运行程序就会发现屏幕上输出的是 name
str1没有初始化,但是我初始化的str2通过strcpy函数拷贝到了str1当中
也可表示为: strcpy(str1,“name”);
注意:str1=str2 是错误的
3.测试字符串长度函数strlen
调用形式:strlen(字符数组);
功能:则是字符数组中字符串的实际长度(所占据的内存字节数)
例如: char str1[10]={“Turbo c”};
printf("%d",strlen[str1]);
运行结果是 7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值