百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

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

liebian365 2024-11-20 18:24 26 浏览 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,有什么注意事项?

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


相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符&quot;

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: