C语言字符串常用操作合集

C语言字符串常用操作合集

两种字符串的表达

有过c语言经验的应该知道,c语言里是没有字符串的,想要在c语言中使用字符串一共有两种方法去实现,一个是字符串数组,一种是通过指针的方式来表示,指针的方式又分为指针数组和数组指针

字符串数组

字符串数组的概念:

在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

依据数组初始化规则,可以把上面的语句写成以下语句:
char greeting[] = "Hello";

以下是 C/C++ 中定义的字符串的内存表示:
在这里插入图片描述
可以看到字符串数组在内存中是连续排列的

当然在实在书写字符串的时候并不需要在后面加一个\0 ,C 编译器会在初始化数组时,自动把 ‘\0’ 放在字符串的末尾。

如何创建一个字符串数组?
  1. 创建的同时不进行赋值 char greeting[10]
  2. 创建的同时进行赋值 char greeting[] = "Hello";
如何从键盘输入字符串数组?

从键盘中输入字符串数组最好是使用fgets方法,这样可以有效的避免越界的情况。内存越界的话可能会引起各种各样的问题,因为你也不知道约出去的内存地址会不会是其他变量的内存地址。
fgets(str,len,stdin)
fgets 函数有三个参数,第一个是你要输入的数组,第二个是指定可以输入的长度,一般填写sizeof(array)就可以了,stdin表示输入流。

如何复制字符串s2到字符串s1?

使用函数 strcpy(s1,s2)

如何拼接字符串?

使用函数strcat(s1, s2);

如何返回字符串s1的长度?

使用函数strlen(s1);

如何比较两个字符串是否相同?

使用函数strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。

如何寻找字符串中的字符?

使用函数strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。

如何寻找字符串中的字符串?

使用函数strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

指针数组和数组指针

注意指针数组和数组指针是不一样的,指针数组是一个数组里面都是指针(array of pointers),而数组指针是一个指针指向一个数组(a pointer to an array)

下面的到底那种是数组指针哪种是指针数组呢:
A) int *p1[10];
B) int (*p2)[10];
“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。至于p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。 所以A是指针数组(array of pointers),B是数组指针(a pointer to an array)
下面是数组指针和指针数组的内存图:
在这里插入图片描述

如何给数组指针赋值

数组指针也叫做行指针,顾名思义数组指针的二维数组中是按行走的

int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

所以数组指针也称指向一维数组的指针,亦称行指针。
使用数组指针来遍历数组?

char a[10];
printf("请输入:")fgets(str,sizeof(a),stdin);
// a pointer to array
char *b = a;
while(*b!=0){
	printf("%c",*b);
	b++;
}
如何给指针数组赋值
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++) p[i]=a[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值