C04_C语言-字符串

1.声明创建

	/*C中没有类似于Java的String字符串类型
	只能使用字符数组保存一串字符*/

	//创建方式1:正确,推荐。不指定数组长度,其自动根据初始化的字符串计算
	char str1[] = "a st";		//默认追加一个'\0'到结尾,表示字符串结束
	printf("str1:%s\n", str1);	//str1:a st

	//创建方式2:错误。指定数组长度,但小于初始化值长度,索引1不是'\0',没有结束标识
	char str2[2] = "a str";		//长度为2,索引为0、1。1位置不是'\0',舍弃初始值后续索引,继续读取内存
	printf("str2:%s\n", str2);	//str2:a a st	//读完本变量后读上一个变量

	//创建方式3:正确,但不推荐。指定数组长度,但大于初始化值长度,超出的索引自动填充'\0',浪费内存
	char str3[9] = "a strr";		//读取到‘r’后第一个'\0'即结束
	printf("str3:%s\n", str3);	//str3:a str
	printf("str3[6]:%s\n", str3[6]);	//str3[6]:(null)

	//创建方式4:不指定数组长度,不使用'\0'结束,这是一个字符数组!不是字符串!
	char str4[] = {'a', ' ', 's', 't', 't'};
	printf("str4:%s\n", str4);	//str4:a stt

	//创建方式5:正确,但不推荐。这是字符数组,但有一位是'\0',有“一段字符串”
	char str5[9] = {'a', ' ', 'i', '\0', 't', 'r'};
	printf("str5:%s\n", str5);			//a i
	printf("str5[5]:%c\n", str5[5]);	//r
	printf("str5[6]:%c\n", str5[6]);	//乱码


2.strlen函数

#include <stdio.h>
#include <string.h>	//字符串处理
void main() {
	//计算字符串中 字符 数量,不包括默认结尾的'\0'
	int size1 = strlen("abcd");
	printf("%d\n", size1);	//4
	int size2 = strlen("ab中文cd");	//每个汉字占3个字符
	printf("%d\n", size2);	//10
	char str[] = "abcd";
	int size3 = strlen(str);
	int size4 = strlen("ab\0cd");	//仍旧是以第一个'\0'为结束标准
	printf("%d, %d\n", size3, size4);	//4, 2
	char str2[] = "abcd";				//字符串,默认有'\0'结尾
	char str3[] = {'A', 'B', 'C', 'D'};	//这是一个数组,没有'\0'结尾
	printf("%d\n", strlen(str3));	//8。读完str3,继续读内存,直到str2结束
	char str4[] = {'A', 'B', '\0', 'D'};	//数组
	printf("%d\n", strlen(str4));	//2。读到'\0'结束
	int i;
	for(i=0; i < strlen(str4); i++){
		if(str4[i] == 'A'){
			printf("有A,位置%d\n", i);
			//return;	//结束函数
		}
	}
	int j = -1;
	while(str4[++j] != '\0'){
		printf("%d...\n",i);
		if(str4[j] == 'B'){
			printf("有B,位置%d\n", j);
			//return;	//结束函数
		}
	}
	//二维字符串数组,第一维可以不指定,第二维必须指定,并且要大于初始化的字符数量
	char arrStr[4][7] = {"Asbvc", "Wde", "54377f", "ousagk"};
	printf("%d\n", strlen(arrStr[1]));	//3
	printf("%s\n", arrStr[0]);			//Asbvc
	printf("%s\n", arrStr[2]);			//54377f
	printf("%c\n", arrStr[3][4]);		//g
}

- end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值