c语言(字符串)

字符串的几种定义方式,最后一种常用

#include <stdio.h>

//字符串的几种定义方式

int main()
{
	//定义 1
	char str1[5] = {'n','i','h','a','o'};
	for(int i = 0;i<sizeof(str1)/sizeof(str1[0]);i++)
	{
		printf("%c ",str1[i]);
	}
	putchar('\n');
	//定义 2
	char str2[5] = "nihao";
	for(int i = 0;i<sizeof(str2)/sizeof(str2[0]);i++)
	{
		printf("%c ",str2[i]);
	}
	putchar('\n');
	//定义 3
	char str3[] = "nihao";
	for(int i = 0;i<sizeof(str3)/sizeof(str3[0]);i++)
	{
		printf("%c ",str3[i]);
	}
	putchar('\n');
	//定义 4
	char *str4 = "ni hao";
	printf("%s",str4);
	return 0;
}

字符串的存储,以及如何有效获取字符串长度

#include <stdio.h>

//字符串是如何被存储的

int main()
{
	//先观察数组变量如何存储
	int arr[3] = {1,2,3};
	printf("arr数组的大小:       %d\n",sizeof(arr));
	printf("arr某个元素的大小:   %d\n",sizeof(arr[0]));
	printf("int的大小:           %d\n",sizeof(int));
	printf("arr数组中元素的个数: %d\n",sizeof(arr)/sizeof(arr[0]));
	putchar('\n');
	//通过以上输出,再观察字符串
	char str[3] = {'h','a','i'};
	printf("str数组的大小:       %d\n",sizeof(str));
	printf("str某个元素的大小:   %d\n",sizeof(str[0]));
	printf("char的大小:          %d\n",sizeof(char));
	printf("str数组中元素的个数: %d\n",sizeof(str)/sizeof(str[0]));
	putchar('\n');
	//如果不写数组大小又如何
	char str1[] = "hai";
	printf("str1数组的大小:      %d\n",sizeof(str1));
	printf("str1某个元素的大小:  %d\n",sizeof(str1[0]));
	printf("char的大小:          %d\n",sizeof(char));
	printf("str1数组中元素的个数:%d\n",sizeof(str1)/sizeof(str1[0]));
	//发现:不写数组大小,输出的数组大小为4,但有效的数组大小为3;
	//这是因为,系统会自动为在你的字符串结尾增加一个 ‘|0’ 字符;
	//在使用%s输出整个字符串时,会找到‘|0’这个字符再停止,否则会乱码,如下:
	printf("%s\n",str1);
	printf("%s\n",str);//会乱码
	//通过以上分析得出,用sizeof(arr)/sizeof(arr[0]) 并不能准确计算字符串的长度,那有什么办法呢?
    //使用strlen来计算,如下:
	printf("str1数组的大小:      %d\n",strlen(str1));
	return 0;
}

字符串常用api  1

#include <stdio.h>

//字符串常用api,这里看看某些常用函数的使用 1

int main()
{
	
	/*char *str = "你好!";
	puts(str);//自动换行
	
	//char *str1;//方式1,在某些编辑器上这样可能不对,但方式三可以
	//char str1[123] = {'\0'};//方式2
	char *str1;//方式3
	str1 = (char *)malloc(128);//malloc 申请了内存空间;
	memset(str1,'\0',128);     //memset 对内存空间进行了初始化;
	printf("请输入:\n");
	scanf("%s",str1);
	puts(str1);*/
	
	//复制函数、拼接函数、对比函数
	int ret;
	char *p;
	char *p1 = "ni bao";
    strcpy(p,p1);
	printf("复制完成,p1=%s,p=%s\n",p1,p);
	memset(p,'\0',sizeof(p)/sizeof(p[0]));
	strcpy(p,"ni hoao");//strncpy函数跟strcpy的区别在于,前者比后者多一个形参,该形参规定了你想要复制字符串的长度如下:
	//strncpy(p,"ni hao\n",2);
	//strcat(p,p1);//拼接函数
	puts(p);
	ret = strcmp(p,p1);//比较函数,相同会返回0
	printf("%d\n",ret);
	
	return 0;
}

字符串常用api  2

#include <stdio.h>

//字符串常用api,这里看看某些常用函数的使用 2

int main()
{
	/*
	//搜索字符函数
	char *str = "ni hao a!";
	char c = 'h';//可以先定义一个字符;也可直接在strchr的第二个形参中写出你要找的字符
	char *p = NULL;
	p = strchr(str,c);//搜索字符函数,找你要找的字符第一次出现的位置,返回指向该位置的指针
	if(p == NULL)
	{
		printf("没找到!\n");
	}
	else
	{
		printf("找到了!\n");
		puts(p);
	}
	//搜索字符串函数(跟上面的函数差不多,不一样的是这个函数搜索的是字符串)
	char *p1 = NULL;
	p1 = strstr(str,"hao");//搜索字符函数,找你要找的字符第一次出现的位置,返回指向该位置的指针
	if(p1 == NULL)
	{
		printf("没找到!\n");
	}
	else
	{
		printf("找到了!\n");
		puts(p1);
	}
	*/
	//转换小写字符串函数(把你输入的字符串的所有大写字符转换为小写)
	char p2[] ="Hello World!";
	puts(strlwr(p2));//注意:它的形参只能是字符串,不能是指针,linux应该可以
	//转换大写字符串函数(跟上面相反)
	puts(strupr(p2));
	//字符串切割函数
	char *p4;
	int i,j;
	i = 1;
	char *p5[10];
	char p3[] = "lao,shi,ni,hao,a";//这个函数的形参也只能是字符串,不能是指针,linux应该可以
	p4 = strtok(p3,",");
	if(p4 != NULL)
	{
		p5[i-1] = p4;
	}
	while(1)//这个函数比较奇怪,要想输出后面分割的字符串,就得在第一个形参填NULL;
	{
		i++;
		p4 = strtok(NULL,",");
		if(p4 != NULL)
		{
			p5[i-1] = p4;
		}
		else
		{
			printf("没有了!\n");
			break;
		}
	}
	for(j=0;j<i;j++)
	{
		puts(p5[j]);
	}
	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值