嵌入式开发学习———Linux环境下C语言学习(六)
·
一维字符数组
一维字符数组是编程中用于存储字符串或字符序列的数据结构。在C语言中,字符数组通常以\0(空字符)结尾,表示字符串结束。例如:
char str[10] = "hello";
这里的str是一个长度为10的字符数组,实际存储了'h', 'e', 'l', 'l', 'o', '\0'。
字符数组的初始化可以通过以下方式完成:
char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello";
基本字符函数
C语言提供了一系列标准库函数(位于<string.h>和<ctype.h>)用于操作字
-
字符串操作函数
strlen(const char *str):返回字符串长度(不计\0)。strcpy(char *dest, const char *src):复制字符串。strcat(char *dest, const char *src):拼接字符串。strcmp(const char *str1, const char *str2):比较字符串。
#include <ctype.h>
#include <stdio.h>
int main() {
char c = 'a';
printf("%c\n", toupper(c)); // 输出 'A'
}
二维整型数组
二维整型数组用于存储矩阵或表格数据,其定义和初始化如下:
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
访问二维数组的元素需指定行和列索引:
printf("%d\n", matrix[1][2]); // 输出第2行第3列的元素:6
二维数组的内存布局是连续的,按行优先顺序存储。动态分配二维数组的示例:
int **arr = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
}
遍历二维数组通常使用嵌套循环:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}

作业:
- 求二维数组中元素最大值的行标和列标,并输出最大值
运行结果:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int main(int argc, const char *argv[]) { int arr[2][3]={1,2,3,4,5,6}; int i,j,max_h=0,max_l=0; for(i=0;i<2;i++) { for(j=0;j<3;j++) { if(arr[max_h][max_l]<arr[i][j]) { max_h=i; max_l=j; } } } printf("最大值为:%d,其行标为:%d,列标为:%d。\n",arr[max_h][max_l],max_h,max_l); return 0; }

- 终端输入一个数,输出该数的二进制
运行结果:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int main(int argc, const char *argv[]) { int num; int arr[15]={0}; int i=0; printf("请输入一个正整数:"); scanf(" %d",&num); do { arr[i]=num%2; num=num/2; i++; }while(num!=0); printf("转换为二进制为:"); for(i-=1;i>=0;i--) printf("%d",arr[i]); putchar(10); return 0; }

- 自己实现strcpy、strlen、strcat、strcmp
- strcpy
运行结果:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> char *mystrcpy(char *p1,char*p2); int main(int argc, const char *argv[]) { char str1[100]="wwwwwwwwwwwwwwwwwwwwwwww"; char str2[50]=""; int i=0; gets(str2); puts(str1); puts(str2); mystrcpy(str1,str2); puts(str1); puts(str2); return 0; } char *mystrcpy(char *p1,char*p2) { int i=0; while(p2[i]) { p1[i]=p2[i]; i++; } p1[i]=p2[i]; return p1; }

- strlen
运行结果:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int mystrlen(char *p); int main(int argc, const char *argv[]) { char str[1000]=" "; gets(str); printf("%d\n",mystrlen(str)); return 0; } int mystrlen(char *p) { int i=0; while(p[i]) i++; return i; }

- strcat
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> char *mystrcat(char *p1,char *p2); int main(int argc, const char *argv[]) { char str1[100]=""; char str2[100]=""; gets(str1); gets(str2); mystrcat(str1,str2); puts(str1); return 0; } char *mystrcat(char *p1,char *p2) { int i=0,j=0; while(p1[i]) i++; while(p2[j]) { p1[i]=p2[j]; i++; j++; } p1[i]=p2[j]; return p1; }运行结果:

- strcmp
运行结果:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int mystrcmp(const char *p1,const char *P2); int main(int argc, const char *argv[]) { char str1[100]=""; char str2[100]=""; int i; gets(str1); gets(str2); i=mystrcmp(str1,str2); printf("%d\n",i); return 0; } int mystrcmp(const char *p1,const char *p2) { int i=0; int logo; while(p1[i]||p2[i]) { if(p1[i]==p2[i]) { logo=0; i++; continue; } else { logo=p1[i]-p2[i]; break; } i++; } return logo; }

- strcpy
- 终端输入一个带空格的字符串,输出有多少个单
- __hello_i_p_ 3
- __h_i 2
- h_o 2
- ho 1
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int main(int argc, const char *argv[]) { char str[100]; int i=0,sign=0,num=0; gets(str); while(str[i]) { if(str[i]==32) { sign=0; } if((str[i]<='z'&&str[i]>='a')&&sign!=1) { sign=1; num++; } i++; } printf("%d\n",num); return 0; }
运行结果:

- 实现字符串的逆置
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int main(int argc, const char *argv[]) { char str[100]="",ch; int i,j; printf("请输入一串字符:\n"); gets(str); printf("置换前:\n"); puts(str); int len=strlen(str); for(i=0,j=len-1;i<=len/2;i++,j--) { ch=str[i]; str[i]=str[j]; str[j]=ch; } printf("置换后:\n"); puts(str); return 0; }运行结果:

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)