字符串与字符数组

字符串与字符数组

定义字符数组

char arr[5]={'h','e','l','l','o'};

打印字符数组

for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)   // 求字符长度可以直接写成sizeof(arr) 因为char类型一个字节大小  不过建议写成sizeof(arr)/sizeof(arr[0])
{
	printf("%c",arr[i]);
}

字符串 字符结束标志位为\0 数字0等同于\0但是不等同于’0’ 因为\0的assima值等于0 0的ASCII值是48

char * arr="hello";
char arr[6]="hello";
char arr[]={'h','e','l','l','o''\0'};=char arr[6]={'h','e','l','l','o'};

注:字符数组如果有’\0’ 标志位可以理解成是字符串 字符串是字符数组的一个头特例

打印字符串

printf("%s",arr); //%s遇到\0停止

没有\0的字符数组不能用字符串打印
字符数组应用比较少 大多数情况用字符串 用字符串一定要考虑\0的位置

通过键盘获取一个字符串

int main()
{
	//定义字符数组存储字符串
	char ch[10]; //最多只能存储9个字符  要预留一个\0
	scanf("%s",ch); //这里没有加取地址符号& 是因为%s本来就是个地址
	printf("%s",ch);
	return 0;
	
}

拼接两个字符串

int main()
{
	char ch1[]="hello";
	char ch2[]="world";
	char ch3[20];
int i =0;
int j=0;
while(ch[i]!='\0')
{
	ch3[i]=ch1[i];
	i++;
}
while(ch[j]!='\0')
{
	ch3[i+j]=ch1[j];
	j++;
}
ch3[i+j]='\0';
printf("%s",ch3);
return 0;
}

字符数组与字符串的区别

1、C语言中没有字符串这种数据类型,可以通过char的数组来代替;
2、字符串是一个char的数组,但是char的数组未必是字符串;
3、数字0(和字符’\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符,只是普通字符数组,所以字符数组是一种特殊char的数组。

//定义字符数组
	char arr[] = { 110,111,112,0,123,98,99}; //对应的是assi值
	printf("%s\n", arr); //打印结果nop  到0停止

字符串输入输出

int main1101()
{
	char ch[100];

	//通过键盘获取一个字符串
	//gets接收字符串可以带空格
	gets(ch);
	//通过正则表达式  获取带空格字符串
	//scanf("%[^\n]", ch); //通过正则表达式接受空格

	printf("%s\n", ch);

	return 0;
}
//注意:由于scanf()与gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。

int main1102(void)
{
	char ch[10];
	//"hello\n\0"
	//fgets可以接收空格
	//fgets获取字符串少于元素个数会有\n  大于等于 没有\n
	fgets(ch, sizeof(ch), stdin);

	printf("%s", ch);
	return 0;
}
//注意:fgets()在读取一个用户通过键盘数日的字符串的时候,同时把用户输入的回车也作为字符串的一部分。通过scang和gets输入一个字符串的时候,不包含结尾的‘\n’,但是通过fgets结尾多了‘\n’。fgets()函数是安全的,不存在缓冲区溢出的问题。

int main1103(void)
{
	char ch[] = "hello world";
	//puts自带换行
	puts(ch);
	//puts("hello\0 world");
	//puts("");换行
	return 0;
}
int main1004(void)
{
	char ch[] = "hello world";
	fputs(ch, stdout);
	//printf("%s", ch);
	return 0;
}
//注意:fputs()是puts()的文本操作版本,但fputs()不会自动输出一个‘\n’

计算字符串有效个数

int main()
{
	char ch[100]="hello world";
	printf("数组大小:%d",sizeof(ch));  //运行结果是100
	printf("字符串长度:%d",strlen(ch)); //运行结果是11
	return 0;
}

int main()
{
	char ch[]="hello world";
	int len=0;
	while(ch[len]!='\0')
	{
		len++;
	}
	printf("字符串长度:%d",len);//运行结果是11
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值