当前位置: 首页 > 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.dtcms.com/a/290981.html

相关文章:

  • DL00691-基于深度学习的轴承表面缺陷目标检测含源码python
  • 【STM32】485接口原理
  • Jmeter如何做接口测试?
  • soft_err错误
  • 【C语言进阶】结构体练习:通讯录
  • OCR 赋能发票管理系统:守护医疗票据合规,让管理更智能
  • Milvus:开源向量数据库的初识
  • 第17章 基于AB实验的增长实践——沉淀想法:实验记忆
  • 基于deepseek的LORA微调
  • react-window 大数据列表和表格数据渲染组件之虚拟滚动
  • Neo4j graph database
  • 剖析Sully.ai:革新医疗领域的AI助手功能启示
  • 20. TaskExecutor与ResourceManager心跳
  • HTML前端颜色渐变动画完整指南
  • 处理excel/wps表格中数值格式的警告的工具和脚本
  • Python 进阶(五): Excel 基本操作
  • Android系统更新实现--OTA空中升级
  • Selenium 处理表单、弹窗与文件上传:从基础到实战
  • 杰发科技AC7840——硬件crc使用
  • 7月21号打卡
  • 破解哈希极化:基于主动路径规划的智算网络负载均衡方案
  • Shell 编程基础入门从认识到实战
  • OSS文件上传(三):断点续传
  • C语言关键字深度解析:从入门到精通
  • 数字ic后端设计从入门到精通12(含fusion compiler, tcl教学)全定制设计进阶
  • 【LeetCode数据结构】栈的应用——有效的括号问题详解
  • Centos安装最新docker以及ubuntu安装docker
  • ESP32-S3学习笔记<1>:ESP-IDF的安装与命令
  • MySQL 核心知识点梳理(2)
  • 贪心算法(基础算法)