C语言字符数组与C++中STL的string的区别

一、字符数组:直接使用,不需要引用头文件

1、初始化:两种方式

       

       第一种方式,数组中只有五个元素,但是第二种方式,赋予的是字符串常量,而字符串常量在C语言中约定用'\0'作为字符串的结束标志,它占内存空间。这里的"china"的有效长度为 5 ,但实际上还有第 6 个字符'\0'。也就是说,当遇到'\0'时,表示字符串结束,由它前面的字符组成字符串。在程序中,常用'\0'来判断字符串是否结束,因此所定义的字符数组长度应该大于字符串的实际长度,这样才足以存放相应的字符串,这就是前面为什么写 6 而不是 5 的原因

      注意,第二种方式,也就是将字符串常量直接赋值给字符数组仅限于初始化中,在程序中的其他位置不允许这样!

2、字符数组的输入输出

      

      

     

    

    C语言有一批字符串处理函数,其中gets() 和 puts() 函数包含在头文件 <stdio.h>中,其余的包含在<string.h>中。

    

    

    

      注意:gets( )识别换行符\n作为输入结束,因此在使用gets( )前,一定要注意是不是有换行符会影响,如果有的话,应该先用getchar( )接收掉换行符,然后再用gets()

       如下:getchar( );

                gets(str);

       此外,如果不是使用scanf()函数的%s格式或者gets()函数输入的字符串(因为这两种格式会自动在末尾加上’\0’, 而字符串常量在C语言中约定用'\0'作为字符串的结束标志),如果没有’\0’,printf的%s格式和puts()函数会因为无法识别字符串末尾而输出一大堆乱码。

       尤其是当使用getchar()来接收时,记得要在字符串末尾加上’\0’。(所以用getchar()或者%c来输入字符串时,如果输出的时候要用puts或者%s,那么一定要记得字符串录入的结尾要加上’\0’

       例如:

                       结果

%c也是一样,

所以输入:gets()  %s   输出:puts()  %s 没问题。因为输入时,那两个会自动在末尾加’\0’

输出是%c或者putchar(), 输入是什么样都没关系,因为和字符串无关了,只是在输出字符

但是如果输入是字符,%c或者getchar(),而输出想要是字符串puts()  %s,那么一定要在输入之后成为每个字符串前,加上’\0’

 

2、字符数组的相关函数

       要用字符数组的函数时,需要加上头文件#include<string.h>

       而C++的STL中的string的头文件是#include<string>  using namespace std;

         

       输出的时候还是需要用int型数据来接收的,int len=strlen(str);

       然后才能输出,返回的是int类型的字符串中有意义的字符个数。

       结果也就是真正的有意义的字符个数:6

 

     

      直接接上,所以是 I am student   本身因为str1中am后面有一个空格,所以接上是这样的,如果是没有空格,那么也还是直接接上的,反正直接接在后面,什么多余的也不要做就对了

      因为接好了之后赋给str1

      

      

      

      

      

      

二、字符数组:

       输入直到文件末尾:

      

       但是,注意,当在黑框中输入数据时,并不会触发EOF状态,所以需要手动触发,按crtl+z组合键,这时就会显示一个^Z,再按回车就可以结束while了

        codeblock中while(scanf("%d",&n)!=EOF)如何在控制台终止循环输入:

        执行后,控制台输入数字后,先换行,后ctrl+z,再换行可以退出,ps:该方法适用于codeblock,如果是其他编辑器,可以尝试ctrl+c/d,但在codeblock试了要么闪退,要么无效(经过验证,确实必须这样!)

       

         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章