数组的大小应该比它将要实际存放的最长字符串多一个元素,从而存放'\0'

一、用一维字符数组存放字符串
c语言本身并没有设置一种类型来定义字符串变量,字符串的存储完全依赖于字符数组,但字符数组又不等于是字符串变量
c语言对字符串的约定:字符串借助字符型一维数组来存放,并以字符‘\0’作为字符串结束标志
c语言中表示字符串常量的约定:c语言 中没有字符串数据类型,但允许使用“字符串常量”,这时不需要人为在末尾加“\0”.
c语言中字符串常量给出的是地址值,指向字符串的首地址

 1.通过赋初值的方式给一维字符数组赋字符串
    char str[10]={'s','t','r','i','n','g','!','\0'};   /* 以一般数组赋初值de方式给一维数组赋初值(数组的大小应该比它将要实际存放的最长字符串多一个元素,从而给‘\0’留有空间 */
     char str1[ ]={'s','t','r','i','n','g','!','\0'}; /* 一定要人为加入'\0' */
     char str2[ ]={'s','t','r','i','n','g','!'};       /* 这总情况不能认为str2中存放了字符串 */
     char str[10]="string!" ; /* 直接赋字符串常量,由于“string!”是字符串常量,系统会自动加入‘\0’ */
     char str[ ]="string!";     /*系统将按字符串中实际的字符个数来定义数组的大小 */
 注:字符数组只要所赋初值的字符个数少于数组的元素个数时,系统都会自动在其后的元素中加入‘\0’,当空间不够
         用时,将会占用一个不属于数组的空间,这有可能会破坏其他数据或程序代码。

二、使指针指向一个字符串
1.通过赋初值的方式使指针指向一个字符串
char ps1= “form one”; / 不要误以为是将字符串赋给了ps1,实际ps1指向了字符串的第一个字符f */
char str[ ]=“form one”, ps2=str;
/
定义指针变量ps2的同时,把存放字符串的字符数组str的首地址作为初值赋给了它,使ps2指向了字符串的f */

   2.通过赋值运算使指针指向一个字符串
       char  *ps1;
       ps1 = "form one";

       char str[ ] = "form two", *ps2;
       ps2 = str;    /*等价于ps2 = &str[0]; */

   3.用字符数组作为字符串和用指针指向的字符串之间的区别
      char mark[ ]="PROGRAM";
      char *pmark = "PROGRAM";
      /* mark总代表一个固定的存储空间,不可改变其值。而指针pmark中的地址可以改变而指向另外一个长度不同的字符串。
         一旦pmark指向新的字符串而没有另一个指针指向原来的字符串,则此字符串将“丢失”*/

三、字符串的输入和输出
1.用格式说明符%s进行整串输入和输出
scanf("%s",str_adr); */ 在scanf函数中使用格式说明符%s可以实现字符串的整体输入,这里str_adr是地址,可以是:字符数 组名、字符数组元素的地址或字符指针变量 */
说明:(1)用%s格式输入字符串时,空格和回车符都作为输入数据的分隔符而不能被读入
(2)若输入字符串的长度超过字符数组所能容纳的字符个数时,系统并不报错。相当于下标越界
(3)当输入项为数组元素的地址时,输入的字符将从这一元素开始依次存放在该数组中。
(4)当输入项为字符指针时,该指针变量必须已指向确定的有足够空间的连续存储单元。

  2.在printf函数中使用格式说明符%s可以实现字符串的整体输出
     printf("%s",str_adr)

  3.调用gets、puts函数在终端输入或输出一行字符串
     (1)gets函数调用形式:
            gets(str_adr); 
         说明:gets函数用来从终端键盘读入字符串(包括空格符),直到输入一个换行符为止,换行符读入后,不作为字符串的内                        容,系统将自动用"\0"代替
      
    (2)puts函数调用形式
              puts(str_adr);
           说明:调用puts函数时,将从这一地址开始,依次输出存储单元中的字符,遇到第一个“\0”即结束输入,并自动输出一个换                             行符。

四、用于字符串处理的函数
1.字符串复制函数strcpy。调用形式如下:
strcpy(s1,s2); /* 作用是把s2所指字符串的内容复制到s1所指的空间中,函数返回s1的值 */

      2.字符串链接函数strcat。调用形式如下:
          strcar(s1,s2);   /*作用是把s2所指字符串的内容链接到s1所指的字符串后面,并覆盖s1串末尾的‘\0’,
                                              函数返回s1所指的地址值 */
      3.求字符串长度函数strlen。调用形式如下:
          strlen(s);            /* 函数计算以s为起始地址的字符串的长度,并作为函数值返回,这一长度不包括‘\0’ */
      4.字符串比较函数strcmp。调用形式如下:
          strcmp(s1,s2);  /* 比较s1和s2所指字符串的大小。若s1>s2,函数值大于0;若s1=s2,函数值等于0,;
                                           若s1<s2,函数值小于0. */
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值