C++学习序列笔记之数据处理(复合类型)

来源:互联网 发布:html5 javascript手册 编辑:程序博客网 时间:2024/05/22 06:50
     在C++里面,复合类型有数组,指针,结构类型,而字符串是一种特殊的数组结构,里面存储的内存相临的字符字节。

相关的额数组,指针操作在C里面也谈得比较详细,下面就谈谈C++里面跟C不一样的地方。

    首先,字符串的输入。在C里面,使用scanf(”%s”,str),来输入字符串的,在C++里面当然也可以,但是C++还有自己的方式输入字符串:Cin.

也许有人说,这只是C++里面的一个输入流对象,有什么好说的?其实也没什么复杂,但是有一些细节的地方关于字符串操作的地方,我觉得还是有必要提出来注意一下。

比如:输入一个单词,你知道cin>>str;如果我需要输入两个单词,你也许会说,简单,cin>>str1,cin>>str2,这样多一次cin不就行了么?可事实是这样么?

我们看下面一个例子:

#include<iostream.h>

Int main()

{

       Const int Size=20;

       Char name[Size];

       Char dessert[Size];

       Cout<<”Enter your name:\n”;

       Cin>>name;

       Cout<<”Enter your favourate dessert:”;

       Cin>>dessert;

       Cout<<”I have some deliciout ”<<dessert<<”for you ”<<name<<endl;

       return 0;

}

程序的用途很简单,就是输入两个字符串,那么结果是什么呢?

    如果提示:Enter your name

    我们就输入:wu

    然后再提示:Enter your favourate dessert

    我们再输入:pizza

    我们的期望是:I have some deliciout pizza for you  wu

    可结果却不是,当我们输入;wu(空格)pizza时,按enter键,那么控制台就输出:

            I have some deliciout pizza for you wu

     而不再提示:Enter your favourate dessert

     为什么会这样呢?我们不是已经输入了么?其实,cin是C++是一个流处理对象,它处理的原理是:有一个流处理缓冲区,调用一个cin就是从缓冲区里面读一次,而每次结束的标识是遇到空格,我们知道上面输入的时候输入了一个空格,那么就不会在提示一次Enter your favourate dessert,而是直接读取流缓冲区里面的东西,所以就不会出现后面的提示。

      那么我们怎么解决这种情况呢?

            1、  用cin.getline(str,size)面向输入行的函数,可以解决这种问题,这个函数是根据有没换行符来判断是否一次输入的。

            2、  可以同过cin.get()函数过滤掉第一次输入时空格后面的,即

      通过cin>>name;cin.get();cin>>dessert;方法来过滤掉第一次输入空格后面的内容,但是这种方法不是很方便,如果有更多空格,那么一个空格就是一个cin.get(),将是一个非常麻烦的事情。

   

    补充一点:关于指针内存申请和回收的操作,只要坚持一个原则:如果定义一个指针数组,那么delete的时候要加上delete[],如果不是,那么直接用delete就行啦

       例如:int *p=new int; 那么 delete p;如果是int *p=new int[10],那么delete [] p;

    好啦,关于符合类型的,就讲这么多其他的关于数组,字符串的操作,联合体的内容,C++跟C的感觉有很多相同的地方,在这里就不介绍啦。。。。。。。。。。。。。。。相互学习,如果错误,欢迎指出,共同进步!

原创粉丝点击