【C语言】第七章字符串

第七章字符串

7.1初识字符串

     C语言本身并没有设置一种类型来定义字符串变量,而是将字符串存储于字符数组来进行处理,但字符数组并不等同于字符串变量。

     字符串以字符‘\0’作为结束标志,C语言对字符串常量是按照字符型一维数组进行存储的。

对于字符串常量,C编译系统会自动在末尾添加一个‘\0’作为结束符。例如:字符串常量”Hello共有5个字符,长度为5,但在内存中占6个字节,最后一个字符存储的是‘\0’。

对于字符数组,字符数组的每个元素可存放一个字符,但并不要求它的最后一个字符必须为字符串结束标志‘\0’。而与字符串有关的大量操作都与字符串结束标志‘\0’有关。

因此,只有在字符数组中的有效字符后加上‘\0’这一特定情况下,才可以把这种字符数组“看作”字符串变量。

由此我们可以得出,字符串变量初始化的格式

  • char c[20]=”computer & c”;

由于”computer & c”是字符串常量,系统会自动在最后加入字符串结束标记‘\0’,所以不必人为加入,此时应注意数组越界。

下面的写法的错误的

char c[12]=”computer & c”;原因是没有为‘\0’预留空间,这样就不是字符串变量了。

       所以我们最终采取下面的形式定义。

char c[]=”computer & c”;

//数组大小为13,字符串长度为12

对于通过逐个数组元素赋初值的方法进行初始化,必须在最后加上‘\0’。只有加上结束符,这个字符数组才能看作字符串变量

注意   

①通过指针代替一维数组定义字符串,只能定义成字符串常量,不能定义出可修改内容的字符串变量。

当把字符串用指针指向时,c编译系统中不会自动添加‘\0’作为结束符,所以这是一个字符串常量,所以在后续的程序中,不能通过访问指针地址的方式去修改内容。

通过一维数组进行存储的字符串,为字符串变量,即通过访问数组元素,直接修改字符串内容。

    

7.2字符串的输入与输出

(1)使用scanf函数和printf函数

     Scanf函数和printf函数可以用于输入和输出单个字符(%c),也可以输入和输出字符串(%s)

由上述代码运行结果可知,

当函数是循环输入单个字符(%c),一共读取了13个字符,赋予了数组str,按照上面的输入,赋给元素str[12]的是换行字符,所以输出时多了一个空行。

当函数输入字符串(%s)的时候,以空格、制表、回车符作为字符串的间断符号。因此在第二次输入时也输入了字符串“computer & c”,但遇到了第一个空格符合的时候,字符串已经间断。所以printf函数只会输出“computer”。

(2)gets函数

    同为输入函数,get函数不同于scanf函数的地方是,使用gets函数可以完整地读入带有空格的字符串,其一般形式为

    调用gets函数时,将从str存放的字符串的起始地址开始依次存放从终端键盘读入的字符串(包括空格符),直到输入换行符为止。

(3)puts函数

     输出函数,其一般形式有两种

不带引号时,其中str是存放字符串的起始地址,puts函数从这一地址开始依次输出存储单元中的字符,遇到第一个‘\0’符号时结束输出,并自动换行。

带引号时,puts函数直接输出引号内的内容,直接得到“C语言”。

7.3字符串的处理函数

(1)字符串连接函数strcat

     其函数定义格式为:

      char *strcat(char *dest, const char *src);

     函数的返回值是指针,为地址。

     其函数调用格式为:

     strcat(字符数组名1,字符串2)

     功能:把字符串2连接到字符数组1中字符串的后面,并删去字符串1的串标识符‘\0’,结果字符串的长度是两个字符串长度之和。字符串2可以是字符数组,也可以是字符串常量。函数返回值是字符数组1的首地址。

注意:在使用strcat函数时,必须包含头文件<string.h>。同时字符数组1应定义足够长的长度。

(2)字符串复制函数strcpy

     其函数定义格式为:

      char *strcpy(char* dest, const char *src);

     是一个指针函数,函数的返回值是指针,为地址。

     其函数调用格式为:

     strcpy(字符数组名1,字符串2)

功能:把字符串2连同串结束标志‘\0’复制到字符数组1中。字符串2可以是字符数组,或字符串常量,当字符串2是字符串常量时,相当于把一个字符串赋予一个字符数组。函数返回值是字符数组1的首地址

strcpy函数要求字符数组1的长度不小于字符串2的长度,否则会出问题

 

(3)字符串比较函数strcmp

功能为比较两个字符串的大小

其函数定义格式为:

int strcmp(const char *s1,const char *s2);

其函数调用格式为:

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

其中,字符串1和字符串2可以是字符数组名或字符串常量。

函数返回值是一个整数,即:

  • 若字符串1=字符串2,函数返回值为0;
  • 若字符串1>字符串2,函数返回值为一个正整数;
  • 若字符串1<字符串2,函数返回值为一个负整数。

字符串比较的方法是:

从左到右按照ASCII码大小比较两个字符串对应位置上的字符,若相等

则继续比较,直到出现不同的字符或遇到‘\0’为止。

       若全部字符相同,则认为相等;若出现不同字符,以第一个不同的字符的比较结果为准,并由函数返回值返回比较结果。

注意:C语言不允许使用关系运算符比较两个字符串大小,例如:

if(st1>st2),   printf(“st1>st2\n”);

(4)测字符串长度函数strlen

     其函数调用格式为

     strlen(字符串)

功能:计算字符串的实际长度(不包含字符串结束标志‘\0’),并作为函数返回值,例如:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

maolin011109

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值