程序员的知识教程库

网站首页 > 教程分享 正文

嵌入式开发-C语言-数组和字符串(c语言字符数组和字符串数组)

henian88 2024-10-25 11:55:04 教程分享 2 ℃ 0 评论

1、掌握一维数组的作用

**数组:**

构造数据类型之一

数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组元素

数组中各个元素的数据类型要求相同,用数组名和下标确定。数组可以是一维,也可以是多维

如: char s[5];

**一维数组**
所谓一维数组是指只有一个下标的数组,它在计算机的内存中是连续存储的

C语言中,一维数组的说明一般形式如下:

<存储类型> <数据类型> <数组名>  [<表达式>];

例:int a[6]  a存放是数组在内存中的首地址

下标 内存

0 a[0]

1 a[1]

2 a[2]

3 a[3]

4 a[4]

5 a[5]

#include<stdio.h>
int main(){
    int a[6],i;
    for(i=0;i<6;i++){
            printf("%p\n",&a[i]);
    }
}
输出:
0x7fffb23e16d0
0x7fffb23e16d4
0x7fffb23e16d8
0x7fffb23e16dc
0x7fffb23e16e0
0x7fffb23e16e4

注意事项:

C语言对数组不作越界检查,使用时要注意

**一维数组的初始化**
初始化方式:在定义数组时,为数组元素赋初值
int a[5]={1,2,3,4,5};
说明
-数组不初始化,其元素值为随机数。
-对static数组元素不赋初始值,系统自动赋0值
-只给部分数组元素赋值。

实例

冒泡排序

它重复地走访过要排序的数列,一次比较两个元素,如果顺序错误就交换,走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

#include <stdio.h>
int main(){
    int n=5;
    int a[5] ={12,56,15,64,7};
    int temp;
    for(int i=0;i<n;i++){

            for(int j=0;j<=n;j++){
                    temp =a[j];
                    if(a[j+1]>temp){
                            a[j]=a[j+1];
                            a[j+1]=temp;
                    }
                    if(j==(n-i)){
                            printf("%d\n",a[j]);
                    }


            }
    }

}

2、掌握二维数组的作用

二维数组的定义

-定义方式:数据类型 数组名[常量表达式] [常量表达式]
    
例:
int a [3][4];
float b[5][2];
int c [2] [3] [4];

二维数组元素存放的顺序
按行序优先 原因:内存是一维的

#include<stdio.h>
int main(){
    int a [3][4]={{1,2,3,4},{5,4,3,6},{9,7,1,6}};
    for(int i=0;i<3;i++){
            for(int b=0;b<4;b++){
                    printf("%p %d \n",&a[i][b],a[i][b]);
            }
    }
}

3、字符数组和字符串

字符数组是元素的数据类型为字符类的数组

-char c[10],ch[3][4];

字符数组初始化

-一个一个字符赋值
-用字符串常量

4、字符串函数

字符串函数的用法

C库中实现了很多字符串处理函数

#include<string.h>

几个常见的字符串处理函数

-求字符串长度的函数 strlen

-字符串拷贝函数 strcpy

-字符串连接函数 strcat

-字符串比较函数 strcmp

strlen

字符串长度函数strlen

格式:strlen(字符串数组)
功能:计算字符串长度
返值:返回字符串实际长度,不包括 ‘\0’在内
\xhh表示十六进制数代表的符号
\ddd表示8进制的

-例:对于以下字符串,strlen(s)的值为“
char s[10]={'A','\0','B','C','\0','D'};
char s[]="\t\v\\\0will\n";
char s[]= "\x69\141\n";

#include <stdio.h>
#include <string.h>
int main(){

    char s[10]={'A','\0','B','C','\0','D'};
    char s1[]="\t\v\\\0will\n";
    char s2[]= "\x69\141\n";

    int len =strlen(s);
    int len1 =strlen(s1);
    int len2=strlen(s2);
    printf("%d %d %d\n",len,len1,len2);
    return 0;
}

strcpy

字符串拷贝函数

格式:strcpy(字符数组1,字符串2)
功能:将字符串2,拷贝到字符数组1
返值:返回字符数组1的首地址
说明:
    -字符数组1必须足够大
    -拷贝时'\0' 一同拷贝
#include <stdio.h>
#include <string.h>
int main(){

    char s[10]={'A','B','C','D'};
    char s1[20];

    strcpy(s1,s);

    puts(s1);
    printf("%s",s1);
    return 0;
}

strcat

字符串连接函数

格式:strcat(字符数组1,字符串2)
功能:将字符串2连到字符数组1后面
返值:返回字符数组1的首地址
说明:
    -字符数组1必须足够大
    -连接前,两串均以'\0'结束,串1的'\0' 取消,新串后加\0';
    
#include <stdio.h>
#include <string.h>
int main(){
    char s[20]="www.chzz";
    char s1[]=".org";

    strcat(s,s1);
    printf("%s\n",s);
    return 0;
}
输出: www.chzz.org

strcmp

字符串比较函数strcmp

格式:strcmp(字符数组1,字符串2)
功能:比较两个字符串
比较规则:对两个字符串左向友一个一个字符比较(ASCII码)直到遇到不同字符或'\0' 为止
返值:返回int型整数
说明:
    -若字符串1<字符串2 ,返回负整数
    -若字符串1>字符串2 ,返回正整数
    -若字符串1==字符串2 ,返回零
    
#include <stdio.h>
#include <string.h>
int main(){
    char s[]="abc";
    char s1[]="abc";
    int result =strcmp(s,s1);
    printf("%d\n",result);
    return 0;
}
输出 :0

5、其他常见字符串函数

strncpy(p,p1,n) 复制指定长度字符串

srtncat(p,p1,n) 附加指定长度字符串

strcasecmp(p,p1) 忽略大小写比较字符串

strncmp(p,p1,n)  比较指定长度字符串

strchr(p,c)     在字符串中查找指定字符

strstr(p,p1)    查找字符串

6、总结与思考

总结

主要学习C语言中常见的字符串函数

包括:strcpy strcat strcmp strlen

思考

使用字符串拷贝strcpy,有什么注意事项?

字符串比较函数,是如何比较两个字符串大小的?


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表