Linux学习-字符串数组和字符串

目录

使用场景

字符型数组定义:

   初始化

数组储存

打印

字符型数组常见函数

常见操作

strcpy:字符串拷贝        

strcat(str1,str2)字符串拼接

strcmp:字符串比较

注意:

二维字符型数组


使用场景

:c语言没有字符串类型,也无法定义字符串变量,只能通过字符型数组,每个元素存放一个字符,最终存放字符串

字符型数组定义:

数据类型  数组名  [元素个数]

char           str          [20] ;

注意:元素个数必须是常量或者常量表达式

           元素个数必须能够容纳下所有字符,包括\0

字符型数组和字符串的区别:字符型数组可以存放字符,不一定包含\0,字符串末尾必须要有\0

字符串以\0来结尾,但是还是不会丢掉后面的\0

   初始化

初始化不能与赋值

全部初始化:char str [6] = {'a','d','r','r','e','\0'};

                        char str [6] = {"heelo"};        

                        char str [6] = "heelo";      

局部初始化:  char str [6] = {'r','e','\0'};  没有给定初值的元素,值为0(\0)

                         char str [6] = {"hee"};        

                        char str [6] = "hee";      

                             char str [6] = {0};是清零        char str [6] = "0";不是是清零      

默认初始化:char str [] = {'a','d','r','r','e','\0'};

                         char str [] = {"heelo"};        

                        char str [] = "heelo";   

数组储存

字符型数组所占字节  =  元素个数

连续性储存

打印

printf("%c",a[n]);打印单个字符

printf("%s",a);打印一串字符 一直到\0,没有\0就会越界找,程序就会有崩溃的风险

puts(a)

注意:打印字符串会打印到最近的一个\0就会结束打印

scsanf("%s",a); 只有%c可以接收空格,有空格要用

gets(a);接收带空格的字符串

确保字符串末尾由\0

字符型数组常见函数

strlen:获得字符串的长度(从字符串开头到最近的\0中间元素的个数,不包含\0)

scanf:获得所占内存大小,包括\0

常见操作

strcpy:字符串拷贝        

拷贝字符串,不太安全

strcpy(目的空间,拷贝数据);

目的空间一定要比拷贝数据大,要不然就会内存越界

strcat(str1,str2)字符串拼接

:将str2拼接到str1的末尾

strcmp:字符串比较

字符串的比较,如果两个字符串相同,结果为零

如果第一个字符串>第二个字符串 ,结果为>0的值

如果第一个字符串<第二个字符串 ,结果为<0的值

两个字符串比较,从左到右每个字符进行比较,不同的字符,谁的ASCII码值大,字符串就大

strtok字符串分割

strtok(str,“ a”),将字符串str通过字符串中的a给切割,原理是将a变成\0以完成字符串切割。

只能切字符串变量(数组中的字符串),内存常量不能切割。

strtok(NULL,“ a”)将剩余的字符串继续切割,到最后一个单词后没有a的时候就会将最后一个单词的首地址返回,

注意:

上述参数常量和变量都可以

strstr

strstr() 函数用于在一个字符串中查找另一个字符串第一次出现的位置。以下是该函数的原型:

char *strstr(const char *haystack, const char *needle);

这个函数在 haystack 字符串中查找 needle 字符串的第一次出现,并返回指向第一次出现位置的指针。如果 needle 字符串在 haystack 中不存在,则返回 NULL。

以下是一个简单的示例:

#include <stdio.h>
#include <string.h>

int main() {
    const char *haystack = "Hello, world! This is a test string.";
    const char *needle = "world";

    // 使用 strstr() 查找 needle 在 haystack 中的位置
    char *result = strstr(haystack, needle);

    if (result != NULL) {
        printf("'%s' is found at position: %ld\n", needle, result - haystack);
    } else {
        printf("'%s' is not found in '%s'\n", needle, haystack);
    }

    return 0;
}

在这个示例中,我们定义了两个字符串 haystackneedle。然后,我们使用 strstr() 函数在 haystack 中查找 needle 字符串的位置。如果找到了,我们输出 needle 字符串在 haystack 中的位置;否则,输出 needle 字符串未找到。

输出将是:

arduinoCopy code

'world' is found at position: 7

这表明 "world" 字符串在 "Hello, world! This is a test string." 中的位置是从索引 7 开始的。

二维字符型数组

定义:数据类型  数组名  [行数][列数];

char  str [5] [32]

存储:和二维数组类似

连续性,有序性

初始化:一般是局部初始化,和二维数组类似

二位字符型数组也可以看作是由两个以为字符型数组构成的

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值