首页 > 其他分享 >day8 字符数组

day8 字符数组

时间:2024-07-23 20:28:40浏览次数:12  
标签:字符 函数 day8 初始化 char 数组 字符串

字符数组

用来存放字符数据的数组叫字符数组。字符数组中每一个元素存放一个字符。

字符数组主要用于处理c中字符串的使用。

字符串:“hello world”用双引号引用起来的就是字符串,在双引号中,字符串中的字符不可更改。
字符串在内存当中按照先后次序排列起来
c语言中,规定了字符串的结束标志位是‘\0’,'\0'可以省略不写,处理器会自动添加

单一性:每一个字符占一个字节
有序性:字符串在内存中按顺序存放
连续性:占用一块连续的内存空间

字符数组的定义

在C语言中,字符数组的定义方式大概是这样的:

char str[6] = "hello";

这里,char 表示字符类型,str 是数组的名字,[6] 表示这个数组可以存储6个字符(包括最后的空字符\0,它是字符串的结束标志)。"hello" 就是被存储在这个数组中的字符串。

形如这样的数组就相当于一个容器:开辟出了一个占100个字节的数组空间,内容存放的是随机数
注意:这个定义的字符串的长度要足够大,最短也要是len+1

字符数组的初始化

对于字符串的声明和初始化,有以下规则:

字符数组的声明和初始化:

字符数组可以在声明时初始化,但不能直接用花括号 {} 进行赋值。
例如:char s[8] = "Beijing"; 是正确的,但 char s[8]; s = "Beijing"; 是错误的。
字符指针的声明和初始化:

字符指针在声明时可以不初始化,之后可以用赋值语句进行初始化。
例如:char *s; s = "Beijing"; 是正确的。
操作字符串不是用长度,而是末尾的\0

形参要和实参类型匹配,个数相等
 

二分法查找
 

定义一个a[begin]和a[end],令(begin+end)/2的值为mid,然后将需要查找的数与mid相比较,就可以确定n的范围,然后再根据第一次比较的结果移动begin或者end的位置,再次比较n与mid的大小,直到确定n的值。

字符串处理函数

1、puts函数

一般形式:puts(字符数组),作用是将一个以‘\0’结束的字符串输出到终端

函数原型:  形参为char*,实参传数组的数组名

puts函数和putchar实现的功能类似

指针数组:由指针构成的数组

2、gets函数

一般形式:gets(字符数组),作用是从终端输入一个字符串到字符数组

函原型: 

get函数在使用时,因为预先定义的数组可能范围不够大,容易造成越界访问
为解决这一问题可以使用fgets函数
 

fgets的三个参数:要写入的地址;地址空间的长度(sizeof(a)/sizeof(s[0]));空间流
gets函数在使用时,会把空格当做是间隔符,然后空格后的就不会再输入了
3、strlen函数

一般形式为 :strlen(字符数组)  是测试字符串长度的函数,函数的值为字符串中的实际长度(不包括'0'在内)。

sizeof(s)是数组的长度,strlen是数组中有效元素的长度

数组不能整体赋值

4、strcpy函数

一般形式为 :strcpy(字符数组1,字符串2)    它是“字符串复制函数”,将字符串2 复制到字符数组1中。

char*:形参为char*,实参为数组的数组名(s[100]的数组名为s)

使用strcpy时,目标数组的长度一定要足够大,最少为strlen(s1)+1;

5、strcat函数

一般形式为:strcat(字符数组1,字符数组2)  其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值--字符数组1的地址。

使用strcat函数时,字符数组1必须足够大,可以容纳连接后面的新字符串

6、strcmp函数

一般形式为:strcmp(字符串1,字符串2)   它的作用是比较字符串1和字符串2。

比较的结果是看strcmp的返回值
>0  数组一大于数组二
<0  数组一小于数组二
=0  数组一和数组二相等

  不能这样比较,这样比较的是两个数组在内存中地址的大小,两个数组在比较时,不能使用关系运算符。

标签:字符,函数,day8,初始化,char,数组,字符串
From: https://blog.csdn.net/2301_80338792/article/details/140620746

相关文章

  • 字符串数组
    一、二分查找法将一个有序的数列取中值,判断数在哪一段,每次筛选原来的一半,重复多次二、字符串数组(容器,用来存放字符)1.初始化内容:chars[100]=“hello”(字符串常量)字符串结束标志:\0(空字符)单一性、连续性、有序性2.输出字符串puts(s)=puts(&s[0])3.输入字符串scanf......
  • 数组和指针的关系,const修饰指针
     数组和指针的关系 const修饰指针总结:const修饰谁谁就不能变      const修饰*( const在* 前)          不能改变*p的值,可以改变p的指向     const修饰p(const在*后)          不能改变p的指向,可以改......
  • SA & SAM 后缀数组 & 后缀自动机
    终于来到大名鼎鼎的后缀结构了,后缀结果可以解决许多子串问题。后缀结果是字符串经常考察的点,需要重点学习。SA后缀排序,是指这个对字符串\(s\)的每一个后缀字符串进行排序,通过处理每个后缀的前缀来解决子串问题。\(SA\):排名为\(i\)对应原字符串下标,\(rk\):下标为\(i\)的后缀排名。......
  • 8. 深浅拷贝、可变与不可变、垃圾回收机制、字符编码、文件操作
    1.可变和不可变数据类型1.1概念可变数据类型:当指定值被修改时内存空间地址不变不可变数据类型:当指定值被修改时内存空间地址发生改变1.2常见类型的代码实现可变类型:list  dict set不可变类型:strint floatbooltuple(1)整数  不可变a=1print(id(a))#25......
  • 字符数组啊啊啊啊
    字符数组的定义字符数组是专门用来存放字符串的容器字符串“”,用双引号引起来且按顺序的叫字符串字符串的结束标志是‘\0’表示方式最简为s[100]=“helloworld”;输出字符串函数:int puts(constchar*s)括号内直接填写字符数组的数组名,puts(s)输入字符串函数:char*gets......
  • 一维数组啊啊啊啊啊啊
    一维数组的定义结构:类型说明符数组名[常量表达式];类型说明符可以是已有的数据类型(唯独不能是void)一维数组元素的使用[]是下标,下标运算符在定义数组时的[]不是下标运算符,是类型说明符,为了说明n为数组数组的数组名代表数组的首元素的地址地址为一个地址值常量不能作为左......
  • 代码随想录算法训练营Day5、6 | Leetcode 242 有效字母的异位词 Leetcode 349 两个数
    前言因为昨天休息所以把两天合并成一天来写,昨天把上周的题又重写了一遍,发现一些细节还是要注意。今天的题目都是查找,也涉及到了最近正在学的STL。Leetcode242有效字母的异位词 题目链接:https://leetcode.cn/problems/valid-anagram/description/代码随想录题解:代码随想......
  • KMP算法中next数组以及nextval的求解(简单,通俗易懂版)
    以一个题为例:计算上图中next[j]以及nextval[j]的值。【本文中j的下标从1开始。】最长公共前后缀:···前缀:不包含最后一个字符的所有以第一个字符开头的连续子串。···后缀:不包含第一个字符的所有以最后一个字符结尾的连续子串。先看next[j],(1)j的下标......
  • 04-【编写loader工程内容】利用内联汇编显示字符串
    在开发操作系统过程中,有时必须使用某些特殊的指令(如inb/outb/hlt),而C编译器无法自动使用这些指令。因此,如果要使用这些指令,有两种方式:1.在汇编文件中为该指令的使用创建汇编函数(子程序),然后在C代码中以函数调用的方式去使用;2.使用内联汇编:即在C代码中嵌入汇编程序。......
  • 如何在Python中获取字符的unicode?
    想要获取中文或越南语的汉名和日文字符的unicode我已经尝试过这些代码text="......