自学嵌入式第八天C语言篇7

目录

一维字符型数组

从数组角度看

 从字符串角度看

总结 

操作字符串的函数 

gets 

puts 

strlen

strcpy 

strcat

strcmp          

二维数组 


 

一维字符型数组

         语法形式:数据类型 数组名 [常量表达式]

从数组角度看

        初始化:从数组角度入手,字符型数组开了一片空间用来存数据,可以往里面存char类型的字符

//初始化时赋入单个的字符
char a[] = {'h','e','l','l','o'};

 从字符串角度看

        初始化时直接赋入一个字符串,可省略初始化器不写。

char s[] = "hello";
//因为系统会自动在末尾加一个'\0'停止标志,所以这个数组占6个字节,但字符串长度为5

总结 

        1.C语言中,字符串是通过一维字符型数组来存储

        2.字符串中有一个'\0'作为停止标志,只要结束时有'\0'这个字符,都可以认为是字符串。

        3.处理字符串时,我们更关心的时停止标志。

        4.处理字符型数组时,我们关心的应该是数组的长度 

操作字符串的函数 

gets 

        函数原型:char *gets(char *s);         

        作用:从键盘获得一个字符串并存储到s字符型数组中。

        代码展现:

char s[50];

//gets操作
gets(s);

//用基础流程控制完成同样操作
int i;
int ret;

//在没有获取到回车时依次赋值到s数组中
while ((ret = getchar) != '\n')
{
    s[i] = ret;
    i++;
}

//在数组的最后一个输入的字符后面加上'\0',组成字符串
s[i] = '\0'

puts 

        函数原型:int puts(const char *s);

        作用:输出一个字符串,该字符串为s

        代码展示:

char s[20] = "hello";
int ret;

//puts操作
puts(s);

//用流程控制完成相同操作
while ((ret = putchar(s[i])) != '\0')
{
    i++;
}

strlen

        函数原型:size_t strlen(const char *s);

        作用:计算一个字符串的长度

        代码展示:

char s[] = "hello";

int i = 0;

int len;

//用strlen操作
len = strlen(s);

//在没有找到'\0'前一直计数,i就是字符串长度
while (s[i] != '\0')
{
    i++
}

printf("strlen = %d\n",i);

strcpy 

        函数原型:char * strcpy(char *dest, const char *src);

        作用:将src字符串复制到dest中

        代码展示:

char s1[50];
char s2[50];
int i = 0;

gets(s1);

//用strcpy完成复制
strcpy(s2,s1);

//用流程控制完成操作
while (s1[i] != '\0')
{
    s2[i] = s1[i];
    i++;
}

//在结束处添加停止标志
s2[i] = '\0';

strcat

        函数原型:char *strcat(char *dest, const char *src);

        作用:将src中的字符串拼接到dest中,变成一个字符串。

        代码展示:

char s1[] = "hello"; 
char s2[] = "world";

int i = 0;

//用strcat完成字符串拼接
strcat(s1,s2);

//找到s1的停止标志的位置
while (s1[i] != '\0')
{
    i++;
}

int j = 0;

//将s2中的字符依次复制到s1中
while (s2[j] != '\0')
{
    s1[i] = s2[j];
    j++;
}

//结束时添加停止标志
s1[i] = '\0';

strcmp          

        函数原型:int strcmp(const char *s1, const char *s2);

        作用:比较s1和s2字符串哪个字符串更大

        补充说明(字符串比较规则):即对两个字符串自左至右逐个字符相比(按 ASCII 码值大小比较),直到出现不同的字符或遇到'\0' 为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第1个不相同的字符的比较结果为准。 就是先找出不同之处,然后比较不同的字符谁大;如果前面没不同,直接找到一个字符串的最后,然后与另一个字符串的同位字符与空字符比。

        代码展示:

char s1[] = "hello";
char s2[] = "hell";
int i = 0;

//用strcmp实现
strcmp(s1,s2);

//找出不同的位置或者找到任一一个字符串末尾
while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
{
    i++;
}

//比较当前位置的值
if (s1[i] > s2[i])
{
    printf("s1 > s2\n");
}
else if (s1[i] < s2[i])
{
    printf("s1 < s2\n");
}
else
{
    printf("s1 == s2\n");
}

二维数组 

        语法形式:类型说明符 数组名[常量表达式][常量表达式];

        初始化:如一维数组相同的是可以全部初始化,也可以部分初始化,不同的是可以按行初始化,用{}隔开。

        本质:二维数组在内存中还是线性的,没有所谓的真正的二维数组,只是将一位数组的内存扩大作为一个元素存到一个数组中,本质上是一维数组的一维数组。

        赋值:

int a[3][4];
int i,j;

for (i = 0;i < 3;i++)
{
    for (j = 0;j < 4;j++)
    {
        scanf("%d",&a[i][j]);
    }
}

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值