当前位置: 首页 > news >正文

C语言基础:字符数组

一维字符数组

应用 : 存储字符串。

1.定义:

类型 数组名[整形常量]; 整形常量 数组的容量,表示可以储存多少个字符 类型 char c语言规定,字符串必须使用\0 作为结束标准。 如果你要在数组中储存一个 hello , hello\0 共计6个字符空间 char string[100]; ​ ​

2.访问

数组名[整形表达式]

str[0] = 'a';

char c =str[0];

使用下标 运算符 [] ,整形表达式 ,常量,变量,表达式-》 整形 。

下标从 0 开始,下标的范围 ,0 - 有效长度 (从下标0 开始 到字符串\0 之前的有效字符长度);

字符数组 也是数组,不能整体操作 。除非调用函数。

char str[10]; str ="hello"; // error 不能整体赋值。
// 访问 写入 // 下标从0 开始, 长度 5 ,从下标0 开始 到字符串\0 之前的有效字符长度 str[0] = 'h'; // str[0] char str[1] ='e'; str[2] ='l'; str[3] ='l'; str[4] ='o'; str[5] ='\0'; // \0 不可以省略 , ​ // 读出 数组元素 putchar(str[0]); // h printf("%c\n",str[1]);//e char c = str[4]; // 字符数组 ,不可整体操作 //str = "world"; puts(str); // 字符串整体输出 ,被输出的字符串一定是以\0 结尾 printf("str is %s\n",str);

3.初始化

// 全部初始化 char str1[6]={'h','e','l','l','o','\0'}; // 'a' 字符常量 1字符 1byte char str2[6]={"hello"}; // "hello" 字符串常量,默认是有\0 char str3[6]="hello"; // 用的多 ​ // 局部初始化 ,剩下没有给处值的,都是\0 char str4[10]={'h','e','o','\0'}; // \0 建议手动加上。 char str5[10]={"hel"}; char str6[10]="hello"; // 常用 char str7[10]={0}; // 常用,空串 ​ 0; // 数字0 '\0' ; //字符串结束标志 0 == ‘\0’ 在内存中存储的 都是 0 '0'; //字符0 ascii 48 0x30 ​ char str8[]={'h','e','l'};// 不是字符串,字符数组,没有\0 char str9[]={"hello"}; char str10[]="hello"; char str11[]={0}; // 不要写成这种,
  1. 遍历

char str[10]={0}; printf("sizeof str[10] is %lu\n",sizeof(str)); printf("sizeof str[0] is %lu\n",sizeof(str[0])); int i = 0 ; int len = 0 ; // 遍历的输入 for(i=0;i<10 - 1 ;i++) // \0 { scanf("%c",&str[i]); if('#' == str[i]) { break; } len++; ​ } str[len]='\0'; //遍历的输出 for(i=0;i<len;i++ ) // { putchar(str[i]); } ​
  1. 字符串相关的常用函数

    函数名功能备注
    strlen获得字符串有效字符长度 size_t strlen(const char *s);
    strcpy字符串的复制,从一个数组到另一个数组 char *strcpy(char *dest, const char *src);
    strcat字符串的拼接 char *strcat(char *dest, const char *src);
    strcmp字符串的比较,比较字符串的内容是否一致 int strcmp(const char *s1, const char *s2);
strlen char str[100]={0}; // char [] char * printf("input string:"); gets(str); //int len = strlen(str); // 有效字符的个数 // int len = 0; ​ while(1) { if('\0'!=str[len]) { len++; } else { break; } } ​ 注意: strlen 和sizeof 的区别 1. strlen ,函数 ,需要外部支持 , c语言标准库 sizeof 关键字 ,不需要额外的支持 ,直接就能用 2. 相对字符数组 strlen ,有效字符的个数, 单位字节 sizeof ,获得数组在内存中的大小, 单位字节
strcpy int main() { //char str1[100]="hello"; char str1[100]={0}; printf("input string:"); gets(str1); char str2[100]={0}; ​ // 不能整体操作 // str2 = str1; // 把str1 的内容 复制到 str2 //strcpy(str2,str1); int i = 0 ; while(1) { str2[i] = str1[i]; if('\0' == str1[i]) { break; } i++; } puts(str2); return 0; } 注意: 目标数组的大小,要能容纳的下,源数组的的内容。否则 ,数组越界。后续行为不确定(可能可以继续运行,也可能程序崩溃,但从逻辑上,已经错误)。 ​

strcat ​ int main() { ​ char str1[100]="hello";//dst char str2[100]=",world";//src //strcat(str1,str2); // int i = 0 ; int j = 0 ; while(1) // 找到 str1的结束的地方 { if('\0'!=str1[i]) { i++; } else { break; } } ​ while(1)// 开始拼接 { str1[i] = str2[j]; if('\0' == str2[j]) { break; } i++; j++; } printf("strcat str1:%s\n",str1); ​ } ​

strcmp 比较两个字符串的内容是否一致 ​ int main() { char str1[100]="hello"; char str2[100]="aaaaa"; char str3[100]="hello"; ​ // 不能写成这样,这个不是比较 str1,str2 的字符串内容 /* if(str1 == str2) { }*/ #if 0 // 系统函数的使用 int ret = 0; ret = strcmp(str1,str2); printf("str1 cmp str2 ret %d\n",ret); ​ ret = strcmp(str1,str3); printf("str1 cmp str3 ret %d\n",ret); #endif ​ int i = 0 ; int ret = 0 ; while(1) { ret = str1[i] - str3[i]; if(0==ret && str1[i]!='\0') { i++; } else { break; } } printf("ret is %d\n",ret); ​ } ​ ​

二维字符数组

应用:

存储多个字符串。

二维数组, 可以被称为 数组的数组。 数组的元素又是一个数组的结构。

语法定义:

数据类型 数组名[行数][列数]; 一维数, 二维数 , 行数,列数,整型常量

char str[3][100] ;

访问, 通过下标运算符 [], 从0 开始,表示第一个元素。 不要越界

char str[3][100] ; 最后一个元素的下标位置 str[2][99] ​ str[0] ,表示第一个字符数组 ,数组名 str[0][0], 表示第一个字符数组里的第一个字符元素

存储 特性:

  1. 单一性

  2. 连续性

  3. 有序

初始化

char str1[3][50]={"hello","ok","how"}; char str2[3][50]={{"hello"},{"ok"},{"how"}}; char str3[3][50]={0} ; // 常用 char str4[3][50]={{0}}; char str5[][50]={"hello","ok","123"}; //一维大小可以省略,二维不能省 //char str6[3][]={"hello","ok","123"}; ​

字符串 逆序,排序

//逆序 for(i=0;i<size/2;i++) { strcpy(t,str[i]); strcpy(str[i],str[size-1-i]); strcpy(str[size-1-i],t); } ​ //排序 sort int j = 0 ; for(j=size-1;j>0;j--) { for(i=0;i<j;i++) { if(strcmp(str[i],str[i+1])>0) { strcpy(t,str[i]); strcpy(str[i],str[i+1]); strcpy(str[i+1],t); } } } ​
http://www.jsqmd.com/news/1298513/

相关文章:

  • 日系与欧美妆前乳对比:从设计理念到实战选择指南
  • 开关电源核心拓扑实战解析:BUCK、BOOST与反激设计要点
  • 为J-Flash添加华大MCU支持:HC32系列烧录配置全攻略
  • TVS管选型与应用全解析:从核心原理到USB接口防护实战
  • 练习项目跟进es查询(day10)
  • 2026年7月四川省资阳市联通融合宽带避坑指南一篇说透 - 找卡家园
  • 操作系统调度算法:从FCFS到CFS,理解进程调度的核心原理与实战
  • 机房精细化运维:U 位资产管理如何解决数据中心资产管控痛点
  • LangChain RAG检索增强生成
  • 四叉树优化弹幕游戏碰撞检测:从原理到实战性能提升400倍
  • AI写作助手如何提升本科生科研论文质量
  • 大模型AI知识库构建与优化实战指南
  • hubuild中的uniapp项目运行在Android Studio平板模拟器中
  • USB Type-C引脚全解析:从6P/16P/24P到硬件设计与实战避坑
  • Unity复刻经典游戏渲染系统:从Shader编写到性能优化实战
  • STM32 HAL库GPIO配置全解析:从推挽开漏到按键消抖实战
  • 5分钟完成FanControl中文界面终极配置:让Windows风扇控制彻底告别英文困扰
  • Landsat卫星数据全解析:从传感器演进到应用实践指南
  • Jackson树模型:JsonNode、ObjectNode与ArrayNode实战指南
  • 从逻辑门到ALU:计算机组成原理中运算器的设计与Verilog实现
  • 2026年7月四川省雅安市联通融合宽带一篇说透怎么选 - 找卡家园
  • Python turtle库图形编程:从基础绘制到多边形动画实战
  • Java面试刷题指南:3天掌握数据结构、JVM与并发编程核心考点
  • Python获取文件大小:四种方法原理、性能对比与最佳实践
  • 嵌入式开发核心概念解析:芯片、MCU、SOC与裸机/系统开发模式选择
  • Spring Boot 应用对接 Prometheus 监控指南
  • 2026年工程项目管理系统推荐甲方视角下的投资管控与合规选型指南
  • USB3.2链路训练与LTSSM状态机:从物理连接到稳定通信的底层原理与调试实战
  • 高并发游戏服务器架构实战:从微变私服到安徒恩攻坚战
  • 2026年7月四川省遂宁市联通融合宽带怎么报装 - 找卡家园