数组的大小应该比它将要实际存放的最长字符串多一个元素,从而存放'\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
    评论
### 回答1: ,可以使用以下方法进行操作: 1. 字符串长度:使用strlen函数可以获取字符串长度,即字符数组实际存储的字符数。 2. 字符串拷贝:使用strcpy函数可以将一个字符串拷贝到另一个字符串中。 3. 字符串连接:使用strcat函数可以将一个字符串连接到另一个字符串的末尾。 4. 字符串比较:使用strcmp函数可以比较两个字符串是否相等。 5. 字符串查找:使用strstr函数可以在一个字符串中查找另一个字符串的位置。 6. 字符串分割:使用strtok函数可以将一个字符串按照指定的分隔符进行分割。 7. 字符串转换:使用atoi、atof等函数可以将字符串转换为整数、浮点数等其他类型的数据。 总之,字符数组存放字符串可以通过各种字符串处理函数进行操作,使得程序更加灵活和高效。 ### 回答2: 字符数组是一种在编程中非常常用的数据结构,特别是在处理字符串时使用得十分广泛。一个采用字符数组存放字符串,也可以被称为C风格字符串,它与C ++ STL中所使用的字符串类是有所不同的。 在C风格字符串中,字符串被表示为字节数组,每个字符都被存储为一个字节,使用空字符('\0')来表示字符串的结尾。因此,要将一个字符数组转换为C风格字符串,需要在最后一个字符之后添加一个空字符。 C风格字符串中有很多常用的函数可以用来操作字符串,例如strlen()函数可以用来计算字符串长度,strcpy()函数可以用来拷贝字符串,strcat()函数可以用来将两个字符数组连接成一个字符串,strcmp()函数可以用来比较两个字符串等等。 在使用C风格字符串时,需要注意一些安全问题。由于C风格字符串没有自动扩展容量的功能,一旦字符串长度超过了数组容量,就会发生缓冲区溢出,导致程序崩溃或被攻击。因此,在使用C风格字符串时,必须保证数组足够大以容纳整个字符串,或者使用函数库提供的安全字符串函数,例如strncpy()和strncat()。 总的来说,C风格字符串是一种非常灵活和高效的处理字符串的方式,但也需要注意字符数组足够大并注意字符串处理的安全问题。 ### 回答3: 字符数组存放字符串str是一种常见的数据类型,它由若干个字符组成,每个字符占用一个字节的存储空间。在处理字符串时,我们需要了解字符数组的基本操作和常用方法。 首先,我们可以通过数组名+下标的方式来获取字符串中某个位置的字符。例如,str[i]代表字符串中第i个字符,i的取值范围是0到字符串长度减1。 其次,字符串长度可以通过strlen函数来获取。该函数的原型为:size_t strlen(const char *str)。其中str表示字符数组的名称,函数返回值为size_t类型,即无符号整数,用于表示字符串长度(不包括字符串末尾的空字符)。 在字符数组中插入一个新的字符,可以采用如下方法:先将字符串末尾的空字符替换为待插入的字符,再加上新的空字符即可。例如,要在字符串str的第5个字符后面插入一个字符c,则可以使用如下代码: char c = 'a'; // 待插入的字符 int pos = 5; // 插入位置 int len = strlen(str); // 字符串长度 for(int i = len; i >= pos; i--) { str[i+1] = str[i]; } str[pos] = c; str[len+1] = '\0'; 删除字符串中某一位置的字符,则需要将该位置后面的字符依次向前移动一个位置,并将字符串末尾的空字符去掉。例如,要删除字符串str中第7个字符,则可以使用如下代码: int pos = 7; // 删除位置 int len = strlen(str); // 字符串长度 for(int i = pos; i < len; i++) { str[i] = str[i+1]; } str[len-1] = '\0'; 最后,我们还可以通过strcpy、strcat等函数来对字符数组进行复制和连接操作。例如,strcpy(dest, src)函数可以将src所指向的字符串复制到dest所指向的字符串中,并返回dest;strcat函数可以将src所指向的字符串连接到dest所指向的字符串的末尾,并返回dest。 总之,针对字符数组存放字符串str,我们需要掌握基本的字符操作、字符串长度计算、插入和删除字符等方法,以及复制、连接等常用函数,才能更好地进行字符串处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值