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

C语言-字符串数组

数组

字符串基础操作

字符串输入

scanf(中间不能有空格)
 scanf("%s",数组名);

注:数组名对应的数组只能是char类型,从控制台输入字符串,默认后面自动加/0

 #include <stdio.h>int main(){//创建一个char数组char name[20];printf("请输入您的姓名:\n");scanf("%s",name);printf("您的姓名是:\n");printf("%s",name); return 0;}
 请输入您的姓名:张三 六您的姓名是:张三--------------------------------Process exited after 12.93 seconds with return value 0请按任意键继续. . .

用scanf的时候,字符串不能又空格,否则遇见空格会结束

fgets(中间可以有空格)
 fgets(数组名 数组长度 stdin);

 #include <stdio.h>int main(){//创建一个char数组char name[20];      //只是创建数组,必须指定容量;如果初始化,可以省略容量//计算数组容量int len =sizeof(name) / sizeof(name[0]);printf("请输入您的姓名:\n");fgets(name,len,stdin);printf("您的姓名是:%s\n",name);return 0;}
 请输入您的姓名:张三 六您的姓名是:张三 六​​--------------------------------Process exited after 6.638 seconds with return value 0请按任意键继续. . .
gets 危险的【C11移出】
 gets(数组名);

从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)

采用gets进行字符串输入,可获取所有输入的字符串,包含 \n ,在实际的字符串处理时,我们可能需要处理 \n

 #include <stdio.h>int main(int argc,char *argv[]){// 创建一个字符数组,用来存储姓名char name[20]; // 只是创建数组,必须指定容量;如果初始化,可以省略容量。// 计算数组容量int len = sizeof(name) / sizeof(name[0]);printf("请输入您的姓名:\n");gets(name);printf("您的姓名是%s\n", name);return 0;}

字符串输出

printf
 printf("转义字符",数组名);

例:

 #include <stdio.h>int main(int argc,char *argv[]){// 创建一个字符数组,用来存储姓名char name[20]; // 只是创建数组,必须指定容量;如果初始化,可以省略容量。// 计算数组容量int len = sizeof(name) / sizeof(name[0]);printf("请输入您的姓名:\n");fgets(name, len, stdin);printf("您的姓名是%s\n", name);.// %s支持字符串常量,也支持字符数组,都是以字符串形式输出return 0;}

fput
 fputs(数组名,stdout);

 #include <stdio.h>int main(){char a[] = "hi xiaoming\neat!\n";//第一种输出printf("%s",a);//第二种输出fputs(a,stdout);return 0;}
 hi xiaomingeat!hi xiaomingeat!​--------------------------------Process exited after 0.1254 seconds with return value 0请按任意键继续. . .

puts 危险的【C11】
 puts(数组名);

 #include <stdio.h>int main(){char a[] = "hi xiaoming\neat!\n";//第一种输出printf("%s",a);//第二种输出fputs(a,stdout);//第三种输出puts(a);return 0;}

字符串相关函数

字符串拼接

 strcat(字符数组,需要拼接的字符串或者字符数组或者字符指针);

解释:

参数1必须是字符数组;参数2可以是字符数组,也可以是字符串常量,还可以是字符指针

这里的参数2拼接到参数1,所以参数1要有足够大的空间来容纳参数2

 #include <string.h>
例:将两个字符串拼接为一个字符串
 //字符串1:足够大的空间char name[20];​//字符串2--UTF-8 :一个汉字占3个字节,占总字节数:3(字节)*4(字数)+1(回车产生\n)+1(字符串默认\0) = 14--GBK :一个汉字占2个字节,占总字节数:2(字节)*4(字数)+1(回车产生\n)+1(字符串默认\0) = 10

 #include <stdio.h>#include <string.h>int main(){char a[20];char name[20];   //用来容纳控制台输入printf("请输入您的名字:\n");//输入,fgets支持空格输入 fgets(name,sizeof(name)/sizeof(name[0]),stdin);//输出,拼接后的东西 fputs(strcat(name,"你好!"),stdout); return 0;}

字符串拷贝

 strcpy(数组名,字符串);

错误:

 #include <stdio.h>#include <string.h>int main(){char name[50] = "张三1";   //用来容纳控制台输入printf("打印初始化的数组:%s\n",name);name = "张思2";  //数组一旦创建,就无法改变,所以不能对数组进行赋值 printf("%s\n",name);return 0;}9 [Error] assignment to expression with array type

正确函数运用:

 strcpy(数组名,"参数");

例:

 #include <stdio.h>#include <string.h>int main(){char name[50] = "张三1";   //用来容纳控制台输入printf("打印初始化的数组:%s\n",name);strcpy(name,"张思2");  //数组一旦创建,就无法改变,所以不能对数组进行赋值 printf("打印修改后的数组:%s\n",name);return 0;}

注(strcat与strcpy)
char a[20] = "┭┮﹏┭┮";     //正确,字符数组的初始化char b[20] = "┭┮﹏┭┮"; b = "柳柳"; //错误,不能对数组进行赋值char a[20] = "三三"; strcpy(a,"琪琪");  //正确,利用函数实现类似赋值的操作

strcat: 三三 + 丝丝 -> 三三丝丝(追加)

strcpy:三三 + 丝丝 -> 丝丝 (覆盖)

字符串比较

strcmp(字符串1,字符串2);

如果字符串1 等于 字符串2,返回0

如果字符串1 大于 字符串2,返回正数(>0)

如果字符串1 小于 字符串2,返回负数(<0)

 #include <stdio.h>#include <string.h>int main(){char username[20],password[8];printf("----------用户登录---------\n"); printf("请输入您的用户名:\n");scanf("%s",username);  //数组名本身就是一个地址(首元素的首地址)printf("请输入您的密码:\n");scanf("%s",password);//校验if(!strcmp(username,"三三")&&!strcmp(password,"123456"))  //相等:strcmp (..) == 0{printf("登录成功!\n");}else{printf("用户名或着密码错误!\n");     }} 

字符串长度(strlen)

strlen(字符串);

 #include <stdio.h>#include <string.h>int main(){char a[] = {'a','i','\0','e','r','\0'};printf("数组长度:%lu\n字符串长度:%lu\n",sizeof(a)/sizeof(a[0]),strlen(a)); // 6  2printf("\n");char b[] = {"ai\0er\0"};    //使用双引号包裹的为字符串常量,后面默认会有一个结尾的\0 printf("数组长度:%lu\n字符串长度:%lu\n",sizeof(b)/sizeof(b[0]),strlen(b));  // 7 2printf("\n");char c[] = {'h','e','l','l','o'};  //strlen()判断一个字符串的长度,优先判断是否存在\0, 如果不存在,就返回数组实际长度printf("数组长度:%lu\n字符串长度:%lu\n",sizeof(c)/sizeof(c[0]),strlen(c));  // 5 5printf("\n");              //不安全,不同编译器可能前面的结果不同 char d[] = "aill";printf("数组长度:%lu\n字符串长度:%lu\n",sizeof(d)/sizeof(d[0]),strlen(d));  // 5 4printf("\n");    }

例:输入一行英文,查找其中有多少个单词
 #include <stdio.h>#include <ctype.h>​int main(){char a[100];//word:统计字符是空字符(空字符;0,非空字符;1);num:用来统计单词个数int num = 0,word = 0;//创建一个变量,用来存储遍历到的字符char b;printf("请输入一句话:");//通过控制台录入字符串 fgets(a,sizeof(a)/sizeof(a[0]),stdin);//遍历for(int i = 0;(b = a[i]) !='\0';i++){if(isspace(b))         //判断一个字符是否为空格,等价于 if(c == ' ')  需要引入"ctype.h"头文件 {//如果是空格标记word = 0; }else{//如果上一个字符是空格,就需要统计单词if(!word)   //等价于 word == 0 {// 标记word为非空格word = 1;//统计单词个数num++; } }}printf("%s\n中有%d个单词",a,num); return 0;}

例:有三个字符串,要求找出其中最大者
 #include <stdio.h>#include <string.h>int main(int argc,char *argv[]){// 创建一个数组,用来存储最大的字符串char max[50];// 创建一个数组,用来存储3个用来参与比较的字符串char str[3][50]/* = {"apple","orange","egg"}*/;int i;// 通过循环控制台输入printf("请输入3个测试字符串:\n");for (i = 0; i < 3; i++){fgets(str[i],50,stdin);}// 比较if (strcmp(str[0],str[1]) > 0) strcpy(max, str[0]);else strcpy(max,str[1]);if (strcmp(str[2],max) > 0) strcpy(max,str[2]);printf("\n三个字符串中最大的字符串是%s\n!", max);return 0;}

http://www.lryc.cn/news/595334.html

相关文章:

  • Vue过度与动画效果
  • FastAPI 中,数据库模型(通常使用 SQLAlchemy 定义)和接口模型(使用 Pydantic 定义的 schemas)的差异
  • Excel函数 —— TEXTJOIN 文本连接
  • 系统分析师-计算机系统-操作系统-存储器管理设备管理
  • LeafletJS 插件开发:扩展自定义功能
  • Java 实现 TCP 一发一收通信
  • 力扣面试150题--搜索二维矩阵
  • A316-Mini-V1:超小尺寸USB高清音频解码器模组技术探析
  • 解决 Ant Design v5.26.5 与 React 19.0.0 的兼容性问题
  • macOS 上安装 Kubernetes(k8s)
  • React 中使用immer修改state摆脱“不可变”
  • Ubuntu安装k8s集群入门实践-v1.31
  • HOT100——图篇Leetcode207. 课程表
  • Redis入门教程(一):基本数据类型
  • (LeetCode 每日一题) 1957. 删除字符使字符串变好 (字符串)
  • 17 BTLO 蓝队靶场 Pretium 解题记录
  • 【C++11】哈希表与无序容器:从概念到应用
  • 【Unity基础】Unity中2D和3D项目开发流程对比
  • 用户虚拟地址空间布局架构
  • git_guide
  • 【Git#6】多人协作 企业级开发模型
  • 【面经】实习经历
  • 深入理解 C++ 中的指针与自增表达式:*a++、(*a)++ 和 *++a 的区别解析
  • 破除扫描边界Photoneo MotionCam-3D Color 解锁动态世界新维度
  • 京东疯狂投资具身智能:众擎机器人+千寻智能+逐际动力 | AI早报
  • 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 | 珂学家
  • [硬件电路-64]:模拟器件 -二极管在稳压电路中的应用
  • 物流链上的智慧觉醒:Deepoc具身智能如何重塑搬运机器人的“空间思维”
  • 库卡气体保护焊机器人省气的方法
  • Java IO流体系详解:字节流、字符流与NIO/BIO对比及文件拷贝实践