当前位置: 首页 > 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.xdnf.cn/news/1163989.html

相关文章:

  • xformers包介绍及代码示例
  • mcu中的调试接口是什么?
  • https正向代理 GoProxy
  • 【C语言进阶】结构体练习:通讯录
  • Day07_网络编程20250721_大项目
  • 从 “能用“ 到 “好用“:中小制造企业数字化转型中的 IT 系统优化管理策略
  • 高性能I/O的终极武器:epoll深度解析与实战
  • 什么是GNN?——聚合、更新与循环
  • 注册表清理优化丨Wise RegistryCleaner_v11.1.10.725(官方赠品)
  • USRP采集信号转换为时频图数据集
  • 理解向量及其运算-AI云计算数值分析和代码验证
  • Mac上安装Homebrew的详细步骤
  • CCLink IE转ModbusTCP网关与三菱PLC通讯无纸记录器
  • selenium爬取图书信息
  • 旋转目标检测(Rotated Object Detection)技术概述
  • Selenium 处理表单、弹窗与文件上传:从基础到实战
  • ACE 插入元件
  • cs336 Lecture2
  • 使用Langchain调用模型上下文协议 (MCP)服务
  • AI革命带来的便利
  • Go语言进阶书籍:Go语言高级编程(第2版)
  • 14.7 Alpaca格式深度解析:3倍指令准确率提升的LLM微调秘诀
  • Jenkins 不同节点间文件传递:跨 Job 与 同 Job 的实现方法
  • Linux | C Shell 与 Bash 的差异 / 环境变量配置问题解析
  • 了解 ReAct 框架:语言模型中推理与行动的协同
  • vscode 使用说明二
  • vscode创建vue项目报错
  • 5.6 framebuffer驱动
  • 人工智能之数学基础:事件间的关系
  • MySQL 核心知识点梳理(3)