首页 > 其他分享 >C语言学习第9天

C语言学习第9天

时间:2024-10-22 17:45:26浏览次数:3  
标签:char 函数 初始化 s1 C语言 学习 字符 字符串

目录

字符数组

概念

定义和初始化

定义:

初始化方式:

二维字符数组

字符串操作函数

头文件:#include

函数名:strlen(s)

sizeof()和 strlen()的区别

函数名:strcmp(s1,s2)

函数名:strcpy(s1,s2)

函数名:strcat(s1,s2)

函数名:void *memset(void *s, int c, size_t n);

字符串输入gets()


字符数组

概念

  • char 字符型组成的数组:在 C 语言中,字符数组是由一系列char类型的字符组成的集合体。一个char类型占用 1 个字节的内存空间,并且对应一个内存地址。

p.s. 字符串常量的特点:字符串常量用双引号括起来,如 “abc”。它的总长度为 4 字节,其中有效长度为 3 字节,这是因为字符串常量的末尾有一个特殊的字符'\0',这个字符标志着字符串的结束。 字符串代表自身首字符地址。

字符串常量的值不能被改变,只有存储在变量中的字符串才能改变其内部数据。

定义和初始化

定义

char a[总长度];

这里的总长度指定了字符数组可以存储的最大字符数量。

初始化方式

全部初始化

可以逐个列出字符进行初始化。

char a[10]={'a','b','a','b','a','b','a','b','a','b'};

也可以使用 ASCII 码值进行初始化.

char a[10]={32,48,49, 32,48,49,50, 32,48,49};

部分初始化

可以只初始化一部分字符

char a[10]={‘a’, ‘b’};

也可以用字符串常量进行初始化

char a[10]= “abc”;

还可以直接初始化为 0,即

char a[10]={0};

特殊初始化

可以直接使用字符串常量进行初始化,而不指定数组的长度

char a[]=“abc”;

此时编译器会自动根据字符串的长度确定数组的大小。

字符数组比前面所讲的一维二维初始化多了一种字符串直接使用的初始化

二维字符数组

二维字符数组可以用来存储多个字符串。例如:

char a[3][60]={0};
char a[3][60]={{0},{‘a’, ‘b’}};
char a[3][60]={“abc”, “123”, “edf”};

for(int i=0;i<3;i++) {
    printf(“%s\n”,a[i]);
}

printf(“%s\n”,&a[0][1]);

在这个例子中,我们定义了一个二维字符数组a,并使用不同的方式进行了初始化。然后通过循环打印出每个字符串,最后打印出a[0][1]地址开始的字符串。

字符串操作函数

头文件:#include

函数名:strlen(s)

函数功能:求字符串有效长度

函数参数:s:填入字符串起始地址

函数返回值:输出有效长度

函数使用:

int len=0;

len = strlen(“hello”);

char str[20]= “hello”;

strlen(str);

sizeof()和 strlen()的区别

sizeof() 运算符 关键字 求总占用长度

strlen() 函数 求有效长度,只能用于字符串

函数名:strcmp(s1,s2)

函数功能:比较字符串是否相同

函数参数:s1,s2:两个字符串的起始地址

函数返回值:相同返回0,不相同返回s2与s1第一个不相同字符的差值(s1-s2)

函数使用:

char str1[30]= “123”;

char str2[30]= “1234”;

int cmp = 0;

cmp = strcmp(str1, str2);

if(cmp==0) {

         printf(“相同\n”);

}

函数名:strcpy(s1,s2)

函数功能:把s2复制到s1中

函数参数:s1,s2:两个字符串的起始地址

函数返回值:成功返回s1的起始地址

函数使用:

char str1[30]= “123456789”;

char str2[30]= “abc”;

printf(“%s\n”,strcpy(str1,str2));

函数名:strcat(s1,s2)

函数功能:把s2拼接到s1后面

函数参数:s1,s2:两个字符串的起始地址

函数返回值:成功返回s1的起始地址

函数使用:

char str1[30]= “123456789”;

char str2[30]= “abc”;

printf(“%s\n”,strcat(str1,str2));

函数名:void *memset(void *s, int c, size_t n);

函数功能:把一个指定的内存段按字节初始化为指定数据

函数参数:s:内存段的起始地址 c:指定数据 n:初始化的长度

函数使用:

char a[100];

memset(a,0,sizeof(a)); // 从 a 的起始地址开始向后初始化100个字节,每个字节都为0

字符串输入gets()

  • gets()函数:用于字符串的行输入,可以读取一整行的字符串,包括空格等字符。
  • puts()函数:自动清空缓冲区并输出字符串,然后自动换行。

scanf()会造成缓冲区残留,所以建议每个scanf()后面都加上清空缓冲区

while(getchar()!= ‘\n’); // 清空缓冲区操作

scanf(“%s%s”,str1,str2); //123 abc

char str[100]={0};

gets(str); // 字符串行输入

p.s.gets 函数由于无法限制输入字符串的长度,容易导致缓冲区溢出

标签:char,函数,初始化,s1,C语言,学习,字符,字符串
From: https://blog.csdn.net/Charary/article/details/143163860

相关文章

  • Markdown学习
    Markdown学习标题三级标题字体helloworldhelloworldhelloworldhelloworld引用come分割线图片![截图](C:\Users\Flipped\Pictures\CameraRoll\src=http___inews.gtimg.com_newsapp_bt_0_14373560901_1000&refer=http___inews.gtimg.png)超链接点击跳转到......
  • Go语言net/http包源码学习
    0.前言该笔记为笔者第一次学习go的net/http包源码的时候所记,也许写的并不是很精确,希望大家多多包涵,一起讨论学习。该笔记很大程度的参考了网名为“小徐先生”的前辈所分享的博客,推荐大家可以先看一看它的博客来一起学习,我的只是照葫芦画瓢还有一些代码更新的讲解而已。当前笔者......
  • Go语言Context包源码学习
    0前言context包作为使用go进行server端开发的重要工具,其源码只有791行,不包含注释的话预计在500行左右,非常值得我们去深入探讨学习,于是在本篇笔记中我们一起来观察源码的实现,知其然更要知其所以然。(当前使用go版本为1.22.2)1核心数据结构整体的接口实现和结构体embed图1.1Conte......
  • 基于Java+SpringBoot+Vue+HTML5教学辅助平台(源码+LW+调试文档+讲解等)/教学辅助工具/
    博主介绍......
  • 深度解析机器学习的四大核心功能:分类、回归、聚类与降维
    深度解析机器学习的四大核心功能:分类、回归、聚类与降维前言分类(Classification):预测离散标签的艺术关键算法与代码示例逻辑回归支持向量机(SVM)回归(Regression):预测连续值的科学关键算法与代码示例线性回归岭回归(RidgeRegression)聚类(Clustering):无监督学习中的分组专家......
  • 前端学习常用网站
    菜鸟教程无论学习什么语言,菜鸟教程都是必须知道的一个网站,上面拥有所有语言的教程,虽然没有官网里的详细,但胜在简洁。w3school在W3School,你可以找到你所需要的所有的网站建设教程。从基础的HTML到CSS,乃至进阶的XML、SQL、JS、PHP和ASP.NET。Web开发文档开放的Web为......
  • HQQ: 快速高效的大型机器学习模型量化方法
    HQQ:革命性的模型量化技术在人工智能和机器学习领域,模型量化一直是一个重要的研究方向。随着模型规模的不断扩大,如何在有限的计算资源下高效部署大型模型成为了一个亟待解决的问题。近日,由MobiusLabs开发的Half-QuadraticQuantization(HQQ)技术为这一难题提供了一个创新的......
  • 基于模仿学习的自动泊车运动规划算法 ResNet+BERT分类模型
    本文使用ResNet+BERT分类模型来实现APA自动泊车算法首先定义模型的输出动作类别类别名说明S0停车S+直行前进单位距离S-直行后退单位距离L+左转前进单位角度L-左转后退单位角度R+右转前进单位角度R-右转后退单位角度设单位距离为0.05米,单位......
  • 【RL Latest Tech】自监督强化学习(SSL-RL):理论与方法
            ......
  • zkw 线段树学习笔记
    一、简介zkw线段树专门用于线段树卡常,同时码量比普通线段树要小。原理是通过将线段树补成完全二叉树,直接找到第\(i\)个叶子节点(编号为\(p+i\)),然后从下往上更新,从而避免递归。这里常数p=1<<(__lg(n)+1),编号为\(p\)和\(p+n+1\)的叶子为虚点,编号为\(p+1\simp+n\)的......