【C语言】字符串+注释

王国探险记系列

文章目录(3)


前言

一,什么是字符串呢?

1,那C语言是怎么表示字符串的呢?

"hello world.\n"

2,证明字符串的结束标志是一个 \0 的转义字符

3,证明字符串的结束标志\0 的重要性

3.1我们在arr2的字符串数组后面加一个\0然后看结果

四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\0

提前知道:

五,注释

总结


前言

C语言王国探险记,是我们学习C语言,从小白成长为大佬的的探险历程,我们在这章将探险字符串和注释这个知识关卡


一,有字符串类型吗?

c语言中字符类型,但是有字符串类型吗?

char

short

int 

long 

long long 

folat

double

我们在怎么类型里面有没有见到一个叫字符串类型的呢?没有

C语言有字符类型,但是没有字符串类型。

1,那C语言是怎么表示字符串的呢?

"hello world.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符 串。

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。

2,证明字符串的结束标志是一个 \0 的转义字符

简单写一个代码让大家跟着我们看一下

我们主函数写出来就什么都不写

我们将在代码加注释和结果运行图中进行知识点的讲解:


//如何证明\0是字符串的结束标志呢
int main()
{

	return 0;
}
//调试技巧:先按F10,开始调试之后,出现箭头开始调试了
//在菜单栏里点调试,然后是监视窗口的,分为1,2,3,4
//点那个监视窗口都可以
//这里给上一个双引号然后加上abcdef。好像平平无奇
//然后我们点开可以看到abcdefg后面跟了一个\0
//实际上当你看到这个字符串的时候可以看到字符串有个\0吗,看不到
//只有当你真正的去观察会发现,g后面还放了一个\0的字符
//其实在字符串的末尾是隐藏了一个\0的字符的,当你写出这样一个字符串的时候悄悄的隐藏了一个\0
//这个\0叫做字符串的结束标准
//一个字符串当真正往后走,遇到\0的时候,它才认为这个字符串结束了
//\0是字符串的结束标志

注意:

我们的main()函数里面是没有任何的值的,我们的第三张图里面的“abcdef"字符串是我们在监控窗口里面添加的

看图:我们可以看到一套流程后,我们可以看到,在字符串的最后有一个隐藏的\0。

3,证明字符串的结束标志\0 的重要性

 我们现在再举一个有打印字符数组来证明\0对字符串有很重要的意义的代码实例:

//字符串是可以存放在字符数组中的
//%s是打印字符串
int main()
{
	char arr1[] = "abc";
	//我们这个地方看到的是这样一个现象,隐藏了一个\0
	char arr2[] = { 'a' , 'b' , 'c'};//我们说C语言里面两个单引号引起来的是一个字符,
    //中间是一个逗号
	//我们可以看到后面没有\0
	//现在开始打印字符串
	//pfintf()怎么来打印字符串呢很简单
	//一个"%s"就可以打印
	printf("%s\n", arr1);//就是把arr1这个里面的字符串数组打印出来,打印完换个行
	printf("%s\n", arr2);//就是把arr2这个里面的字符串数组打印出来,打印完换个行
	//这就是我们现在的打印两个字符串
	//看一下我们的效果
	return 0;
}
//调试调监控,发现确实后面隐藏了\0
//证明了字符串里面放了一个隐藏的\0
//这个\0是字符串的结束标志,她对于字符串来说非常重要

我们通过代码+注释和结果运行图来理解:

结果分析: 

我们可以看到arr1有\0作为结束标志,arr2数组是没有\0作为结束标志,我们在通过运行结果图可以看到

arr1打印完abc就停下来了

arr2打印完abc就是烫烫烫烫.....

在里面最大的问题就在于\0,我们前面说了\0是字符串的结束标志

我们还可以通过字符数组在内存中的表示形式来理解\0的重要性:

arr1的内存布局

a b c \0

因为有\0所以就只打印到c就停止了,就证明了\0的重要性

arr2的内存布局

a b c 

后面是啥不知道,我只知道我在数组里面放了abc,后面是不是\0不知道所以当%s打印arr2的时候,字符串打印一定是遇到\0停止,当c打印完之后要不要打印呢,取决于后面有没有\0,我们这个结果可见没有遇到\0,直达在某一个一个地方遇到\0了,恰好又是他随机碰上的一个\0才停止打印。这就证明了\0的重要性

3.1我们在arr2的字符串数组后面加一个\0然后看结果

我们通过代码+注释和结果运行图来理解:

int main()
{
	char arr1[] = "abc";
	//我们这个地方看到的是这样一个现象,隐藏了一个\0
	char arr2[] = { 'a' , 'b' , 'c' ,'\0'};
	//如果这里主动放一个\0呢,我们打印看一下
	// 这个时候就是两个abc了
	//我们说C语言里面两个单引号引起来的是一个字符,中间是一个逗号
	//我们可以看到后面没有\0
	//现在开始打印字符串
	//pfintf()怎么来打印字符串呢很简单
	//一个"%s"就可以打印
	printf("%s\n", arr1);//就是把arr1这个里面的字符串数组打印出来,打印完换个行
	printf("%s\n", arr2);//就是把arr2这个里面的字符串数组打印出来,打印完换个行
	//这就是我们现在的打印两个字符串
	//看一下我们的效果
	return 0;
}

 我们可以看到运行结果图,在arr2后加一个\0就可以被编译器正常的识别结束

再一次证明了\0的重要性

四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\0

提前知道:

我们计算字符串长度用到一个函数叫strlen()
str就是字符串的意思,len就是计算的意思
strlen()是一个库函数 -- 求字符串长度的,统计的是字符串中\0之前的字符个数
#include <string.h>//是strlen()这个函数所需要的头文件,string就是字符串的意思,
注意你使用字符串系列的的函数都需要引用这个头文件

我们通过代码+注释和结果运行图来理解:

//我们计算字符串长度用到一个函数叫strlen()
//str就是字符串的意思,len就是计算的意思
//strlen()是一个库函数 -- 求字符串长度的,统计的是字符串中\0之前的字符个数
//#include <string.h>//是strlen()这个函数所需要的头文件,string就是字符串的意思,
//注意你使用字符串系列的的函数都需要引用这个头文件
int main()
{
	char arr1[] = "abc";//我们统计arr1的时候我们统计到c就停止了,
	//因为遇到了\0,所以统计出来是3
	char arr2[] = { 'a','b','c' };
	printf("%d\n",strlen(arr1));//长度肯定是整数嘛,我们用%d来打印
	//strlen在数arr1的时候应该是3
	printf("%d\n", strlen(arr2));//求长度的时候也是遇到\0才停止,所以是一个随机的值
	//在计算字符串长度的时候\0是结束标志,不算作字符串内容。是统计个数的时候不统计在内的
	//但是对于arr2来说统计玩c,后面还要统计多少个字符才能遇到\0都是未可知的
	//所以strlen统计的arr2是多少是不知道的,就可能是一个随机值
	return 0;
}

 解释:

arr1和arr2的区别呢?
他们里面就差一个\0
像arr2这种没有\0的字符串是不能使用%s来打印的
但是你想要使用%c一个一个字符的去打印也是没有问题的
上面这些就是为了告诉我们字符串是上面,已经字符串中的\0是干什么的,
她是作为字符串的结束标志而存在的
这个结束标志是在统计长度的时候,和打印的时候遇到\0就停止了

五,注释

1,代码中不需要的代码可以直接删除,也可以注释掉
 我们就会将写注释方便我们去理解,当我们遇到不想删除的代码我们就可以注释掉,
 让其不在发挥作用
2.代码中有一些代码比较难懂,可以加一下注释文字
我们在上面写的代码当中,为了让我们更好的去理解代码,
写注释就是一个解释这个东西到底是啥,有啥用,帮助我们理解代码,帮助别人阅读代码的

int main()
{	
	/*这种注释方式是C语言自带的,可以一次注释多行,
	但是这种注释方式是不能嵌套注释的,如果它里面已经有了/**/就会不能完全注释掉*/
	//这是c++的注释方式
	int a = 10;//创建一个整型变量,并赋值为10
	return 0;
}

c语言风格的注释/*xxxxxxx*/

        缺陷:不能嵌套注释
c++语言风格的注释//xxxxxxxx
        可以注释一行也可以注释多行,能嵌套注释


总结

以上就是今天要讲的内容,本文仅仅简单介绍了字符串的基本概念及和注释,可以让你在c语言王国的探险更加有趣,充实。

  • 34
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
请看下面的代码: ```c #include <stdio.h> #include <string.h> void replace_str(char *source, char *target, char *replace) { int len_source = strlen(source); // 获取源字符串长度 int len_target = strlen(target); // 获取目标字符串长度 int len_replace = strlen(replace); // 获取替换字符串长度 // 初始化指针 char *p = source; char *q = source; char *tmp = NULL; // 循环查找目标字符串 while ((q = strstr(p, target)) != NULL) { // 将目标字符串替换为替换字符串 tmp = (char *)malloc(sizeof(char) * (len_source + len_replace - len_target + 1)); strncpy(tmp, p, q - p); tmp[q - p] = '\0'; strcat(tmp, replace); strcat(tmp, q + len_target); strcpy(p, tmp); free(tmp); // 指针后移 p = p + strlen(replace); } } int main() { char source[100], target[20], replace[20]; printf("请输入源字符串:"); scanf("%s", source); printf("请输入目标字符串:"); scanf("%s", target); printf("请输入替换字符串:"); scanf("%s", replace); replace_str(source, target, replace); printf("替换后的字符串为:%s", source); return 0; } ``` 这段代码实现了从键盘输入源字符串、目标字符串和替换字符串,查找源字符串中的目标字符串并进行替换,并输出完成查找和替换后的字符串。具体实现过程是:使用 `strstr` 函数查找目标字符串在源字符串中的位置,然后使用 `strncpy` 和 `strcat` 函数将替换字符串插入到源字符串中对应位置,最后将指针后移即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值