一维字符数组

一维字符数组是编程中用于存储字符串或字符序列的数据结构。在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>)用于操作字

  1. 字符串操作函数

    • 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");
}

作业:

  1. 求二维数组中元素最大值的行标和列标,并输出最大值
    #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;
    }
    
    
    运行结果:
  2. 终端输入一个数,输出该数的二进制
    #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;
    }
    
    运行结果:
  3. 自己实现strcpy、strlen、strcat、strcmp
    1. 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;
      }
      
      
      运行结果:
    2. 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;
      }
      运行结果:

    3. 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;
      }
      

      运行结果:

    4. 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;
      }
      
      
      运行结果:
  4. 终端输入一个带空格的字符串,输出有多少个单
     
    1.  __hello_i_p_    3
    2. __h_i                2
    3. h_o                   2
    4. 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;
      }
      

      运行结果:
  5. 实现字符串的逆置
    #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;
    }
    
    

    运行结果:

Logo

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

更多推荐