字符串及字符串I/O

关于字符串

使用字符串主要有两种方式: 使用 char类型的数组 或者使用 指针

初始化字符串数组

char a[x]={"asdfghjkl"}   ==   char a[x]={'a','s','d','f','g','h','j','k','l'}

x为char类型元素的数量,x可以是任意整型常量 或者 整型常量表达式,  C99及其之后的版本 x 可以是变量(即支持使用边长数组)

x可以不填, 则编译器会根据元素自动判断数组的大小

若初始化一个稍后填充的数组则声明时必须填入大小

声明时要确保数组大小比字符串大1(留下容纳空字符\0的位置)

用指针表示法创建字符串

const char *pt1="asdfghjkl"     \\const表示不能修改字符串内容

"字符串字面量"就是字符串的首地址,可以通过指针 pt1+x 来使用字符串中的第x+1个字符

*创建含多个字符串的数组

const char *j[3]={"aaa","bbbb","ccccc"};   \\一个名为j的数组,它的三个元素为指向char的指针

const char k[3][5]={"aaa","bbbb","ccccc"};  \\一个名为k的数组,它的三个元素为大小为5个char的数

两者的区别

k中的数组存储着字符字面量的副本, j中则只存储了字符的首地址,因此k这种方式所占用的存储空间更大. 同时k中每个元素的大小都相同(不管是"aaa"还是"ccccc"的大小都是5个char), 而j中每个数组的大小不同, 因此 j (指针数组)这种方式的运行速度会更快

综上可以看出, 如果要用数组表示一系列待显示的字符串的时候最好使用指针数组, 因为它比二维字符数组效率更高. 但是由于const指针数组所指向的字符串字面量不能更改,所以 如果 要改变字符字面量或者 为字符串输入预留空间 要使用二维字符数组

字符串的输入

gets()

gets()函数会读取整个字符串,当gets()遇到一个换行符时候会停止读取,自动丢弃换行符, 存储其余字符

fgets()

格式: fputs(输入的数组\字符串, 读入字符长度n, 要读入的文件)  

fgets()函数会读入n-1个字符(读到第一个换行符时候停下), 当fgets函数读到换行符时会将换行符一起输入存储,如果读入从键盘输入的数据一般使用stdin(标准输入)

fgets()会返回指向char的指针,一般会返回的地址与传入的第一个参数相同,如果读到文件结尾则会返回 NULL(空指针),在代码中可用数字0代替

scanf()函数

scanf()函数会读取字符串直至遇到下一个空白字符(包括空行 空格 制表符 或者换行符)

scanf()会返回读取成功读取项数或者 EOF(读到文件结尾EOF)

字符串的输出

puts()

puts()会在待输出字符串的结尾加上一个换行符

fputs()

格式: fputs(输出的数组\字符串, 写入数据的文件)

如果打印在显示屏上可以使用stdout(标准输出)作为第二个参数

printf()

应该是大家最先学习的,处理复杂的输出时候比较方便,以前文章有详细介绍过,这里不再赘述了

常用字符串函数(储存在string.h中)

strlen()  统计字符串长度

不包含空字符\0

strcat()  拼接字符串

stract(字符串1,字符串2)  使用后字符串1末尾会接上字符串2的副本,并且重新储存为字符串1,字符串2 不会有改变

strncat() 拼接字符串

strncat(字符串,字符串2,接收的字符串长度n)  同strncat的用法相同, 但是当字符串1接收到第n个字符或者空字符时候会停止接收字符串

strcmp()  比较字符串

strcmp(字符串1, 字符串2)  如果1和2相同就返回0, 否则返回一个非零数,  如strcmp("A","B")返回-1, strcmp("B","A")返回1(取决于具体的情况), 但是若1中的字符排在2中字符的前面返回一个负值, 后面返回一个正值,  一般大写字母排在小写字母前面. 如果字符串前面的内容完全相同, 则会一直比较知道遇到不同的字符

为什么不能通过!=来比较两个字符串? 因为!=实际上是比较两个字符串的地址

strncmp()   比较字符串

strncmp(字符串1,字符串2, 比较字符数n)   用法与strcmp()相同,  但是能通过第三个参数来控制比较前n个字符  

strcpy() 复制字符的值

strcpy(指针1 ,指针2)  将指针2上的字符串复制到指针1上

可以通过这种格式给pts1中的第的7个字符开始复制 strcpy(pts1+6 ,pts2) 

strncpy() 复制字符的值

strncpy(指针1,指针2,复制最大字符数n) 与strcpy()的使用方法相同,但是可以通过第三个参数n来控制复制的最大字符数

sprintf()  将多种数据合并成一个字符串后存入一个数组

sprintf(数组a,".......",...,....,......)  用法与printf()类似,不过sprintf() 是将多种数据合并成一个字符串并且储存在数组a中

sprintf() 在stdio.h中

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值