C语言数组就靠这个了(二)

因为在C语言中没有专门的字符串变量,所有字符串的储存都是通过字符串数组来实现的。通常一个字符串就是用一维字符数组来储存的。二维字符数组是用来储存多个字符串,一般是一行数组就是一个字符串。然后我们在使用字符串数组的时候要注意:字符串数组的结尾都是以’\0’(空字符)结束的,而一般的数组是没有这个的。所以我们在定义字符串数组的长度的时候一般都会多一位,这个多的一位就是用来储存’\0’。为什么要这样呢?原因很简单,因为后面有很多处理字符串的函数都是以这个为标志的,那些函数都是以’\0’来表示处理完了一个字符串,如果没有这个标志的话,那么函数会打印出很奇怪的东西,或者会多打印出来。然后在说下内存的问题,一般一个字符的大小为一个字节,所以一个字符串有多少个字符就占有多少字节,而且这个在内存中的储存是连续的,不过别忘了’\0’,也是占一个字节的。这个’\0’它会占内存不过在打印的时候不会打印出来。
如何声明一个字符串数组,这个和声明数组是一样的,变量类型 数组名 [数组长度];字符串的变量类型是固定的都是char类型。如何初始化一个字符串数组,这也是比较容易的,就像是上一次初始化普通数组一般,可以部分赋值,那么在多余的地方系统会自动补上’\0’;还有就是全部赋值,不过在最后要加上’\0’。下面用一些例子来说明,比较清晰。二维数组的初始化就不展示了,类似的。不过是多个维度。

char str1[6] = “hello”;
char str2[6] = {“hello”};
char str3[6] = {‘h’,‘e’,‘l’,‘l’,‘o’};
char str4[  ] = {‘h’,‘e’,‘l’,‘l’,‘o’};  //这个要注意,一般都不会用这个定义的,因为这个末尾不会有’\0’。
char str5[  ] = {‘h’,‘e’,‘l’,‘l’,‘o’,’\0};

然后就是对于引用其中一个字符,也是通过索引下标的方法(不过字符串一般不会单个字符使用)。
下面重点是介绍一下对于字符串数组的处理函数。
在我们的C语言的库中有很多的函数库都是用来处理字符串数组的,我们马上就来介绍几个常用的函数。

gets()函数

字符串输入函数(头文件:#include <stdio.h>)
①函数原型:char *gets(char *buffer); 这个buffer是存放输入数据的首地址。
②返回值:成功时返回输出缓冲区首地址,否则返回NULL
③功能说明:是接受通过标准输入所获得的字符串的最简单的方法;它接受按下回车键以前输入的所有字符(包括空格);并用“\0”字符替换末尾的换行符“\n”。
这个函数的存放的数组的大小一定要注意,不然很容易越界。

#include <stdio.h>
char name[50]={0};
get(name);

puts()函数

字符串输出函数 (头文件:#include <stdio.h>)
①函数原型:int puts(const char *string); string是要输出字符的首地址(必须是地址)。
②返回值:成功时返回最后一个字符的ASCII码(‘\n’),否则返回EOF
③功能说明:用于在标准输出设备上显示字符串,并把末尾的字符串结束符 “\0”替换成换行符“\n”字符输出
这个函数在输出的时候,会自动输出换行符,也就是会自动换行。

puts(name);

sprintf()函数

格式化输出到字符串 (头文件:#include <stdio.h>)
①函数原型:int sprintf( char *buffer, const char *format [, argument] … )
②函数参数:buffer是字符数组名,就是最后输出的字符串。format是格式化字符串。
③返回值: buffer中字符的个数 ,否则返回EOF。
④函数功能:将其他数据类型转换成字符串类型并输出到指定字符串中.
在这个格式化字符串之中,一般会用符号隔开每个字符串,目的是方便后面的拆分。这边的buffer一定要足够大,不然也会容易出现数组下标越界的情况。

sprintf(buf,%s-%s”, name, pwd);
sprintf(buf,%s %s”, name, pwd);
// 这边用空格隔开是因为,在后面使用拆分函数的时候,这个空格会自动换成‘\0’。
//这边我们可以看出,这个函数在拼接的时候也是以’\0’表示一个字符串,
//也就是在识别到’\0’的时候表示这个字符串结束,不在继续把这个字符串放入到buffer中,
//转向下一个字符串。不过这边我们可以自己去写一个拆分函数,让他按我们的想法拆分字符串。

sscanf()函数

这个函数就是用来拆分函数的,一般是与上面的函数组合使用。格式如下:

sscanf(buf,%s %s”, pname, ppwd);

这边也是要注意使用空格来拆分,可以防止拆开来的pname和ppwd或出错,这个函数也是拆分的时候只有遇到‘\0’才会结束一个字符串的拆分。不过“%s %s”这个东西一般和上面那个sprintf函数中的一样就可以了。

下面介绍一些处理字符串的方法,这些方法要先引入头文件 #include <string.h>
①strlen函数

函数功能:确定字符串的长度,不包括“\0”的长度
函数原型:int strlen(const char *string);
函数参数:string这个是字符串的首地址
返回值:字符串实际长度,即字符串中‘\0’之前的字符个数。

②strcpy函数

函数功能:将一个字符串中的值复制到另一个字符串中
函数原型:char* strcpy(char *dest,const char *source);
函数参数:dest是目标字符的首地址,source是要复制字符串的首地址。
返回值:成功时返回dest,否则返回NULL
要注意的是,这个dest目标字符串一定要足够大。
这边在扩展一个函数:strncpy(dest, source,num);这个函数也是复制函数,与strcpy一样,不相同的是这个函数可以控制复制字符的个数,这个num参数就是控制这个字符个数的,表示复制几个字符。
source这个字符串复制到dest,那么就会覆盖掉dest之中的字符串,当然这个覆盖多少,取决于source字符串的长度。

③strcat函数

函数功能:将两个字符串连接成一个字符串(将source 接到dest的末尾)
函数原型:char *strcat(char *dest,const char *source);
函数参数:dest–目标字符串首地址, source—要连接的字符串的首地址
返回值:成功时返回连接成功后的首地址即dest,否则返回NULL
这边要注意的是,这个dest的长度必须足够大。函数在结束的时候会在dest最后保留一个 ‘\0’。

④strcmp函数

函数功能:比较两个字符串并根据比较的结果返回一个整数值
函数原型:int strcmp(const char *str1,const char *str2);
函数参数:str1—字符串1的首地址,str2—字符串2的首地址.
返回值:有三种情况如果 1. str1<str2,则返回值小于零;2. 如果 str1 与 str2 相同,则返回值等于零;3. 如果 str1>str2,则返回值大于零。
比较原则:从左至右逐个对应字符按其 ASCII码值大小相比较,直到出现不同的字符或遇到‘\0’为止。
这个可以用在做用户登录的时候。

⑤ strchr()函数

函数功能:判断某个字符是否在字符串中出现
函数原型:char* strchr(const char *str,char ch);
函数参数:str–要查找的字符串首地址, ch—要查找的字符
返回值:如果该字符在字符串中出现,将返回对应这个字符(由 chr 所指向的)在字符串 str 中第一次出现的指针。如果未出现,则返回 NULL

⑥一些其他函数

strlwr函数
其一般形式为:strlwr (字符串)
strlwr函数的作用是将字符串中大写字母换成小写字母。
strupr函数
其一般形式为:strupr (字符串)
strupr函数的作用是将字符串中小写字母换成大写字母。

再介绍一些处理单个字符的函数

头文件:#include < ctype.h >
注意这个的ch是指单个字符,不是字符串。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值