小站随笔
大道至简,知易行难
posts - 4,comments - 0,trackbacks - 0
 

最近准备从头弄遍C++,以前太浮躁,看的书很多,就是没沉下心去仔细学习,所以现在决定了一项一项的解决问题。先拿c++开刀吧。

4.1 数组

注意要点

1.       申明通用格式:

typeName arrayName[arraySize]

arraySize必须是在编译时就是已知的值。

2.    sizeof:

       Sizeof操作符返回类型或数据对象的长度,用于数组元素,则得到的是整个数组中的字节数。

3.    编号:

从0开始编号,例如:Months[0]是Months数组的第一个元素。

最后一个元素的索引比数组长度小1。

4.        数组的初始化

即初始化时可以赋值,否则只能单个的给数组元素赋值。

int cards[4] = {3,6,8,10};             //okay

       int hand[4];                         //okay

       hand[4] = {3,6,8,10};           //not allowed

       hand = cards;                       // not allowed

5.        若只对数组的一部分初始化,则编译器将把其他元素设置为0

如:

long totals[500] = {0};

6.        初始化时数组[]为空,则编译器将计算元素个数。

eg.

short things[] = {1, 5, 3, 8};

int num_elements = sizeof things /sizeof(int);

 

4.2 字符串

C++处理字符串的方式有两种。第一种来自c语言,称为C-风格字符串。另外一种是基于string类库的方法。

注意要点

1.       C-风格字符串特殊的一种性质:以空字符结尾,空字符被写做\0,其ASCII码为0,用来标记字符串的结尾。

如char dog[5] = {'a','b','c','d','\0'};     //C-风格字符串

 char cat[5] = {'a','b','c','d','e'};         //non-C-风格字符串

 

C++很多处理字符串的函数,包括cout的那些函数,都是逐个处理字符串中的字符,直到到达空字符为止。若处理dog这样的字符串,则输出abcd,遇到’\0’,停止。但处理cat的话,则不停止,而是继续,知道遇到这个内存地址后面的首个空字符为止。

 

       2.用上面的示例初始化一个字符串很麻烦,而可以用字符串常量(如“abcde”)来初始化。

       eg.

              char bird[10] = “Mr. Cheeps”; //the \0 is understood

              char fish[] = “Bubbles”;        //let the compiler cout

        用””括起来的字符串隐式的包括结尾的空字符,空字符也在数组中占据了一个字节的字符空间。也可让编译器自动计算大小,而不用给出数组具体值。

 

3.双引号“”,如“abcde”表示的是字符串所在的内存地址。

 

4.sizeof操作符指出整个数组的长度(字节),而strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。

Eg.

       Const int size = 15;

       Char name[size] = “C++owboy”;

       Cout<<strlen(name)<<endl;   //8,共有字符8个

       Cout<<sizeof (name)<<endl; //15,大小15个bytes

      

       5.字符串的输入

       const int size = 15;

       char name1[size];

       char name2[size];

       cin>>name1;

       cin>>name2;

       cout<<name1<<endl;

       cout<<name2<<endl;

若输入 abcdef 123456然后回车换行,则程序直接运行,输出abcdef 123456,因为cin是使用空白(空格、制表符和换行符)来定字符串的界。所以它获取了一个单词后,就直接把它放到数组中,并在结尾处添加空字符。若要输入new york到一个数组,那么怎么办?可以用cin.get()或者cin.getline();这两个输入时面向一行的。

7.        cin.getline()

有两个参数,第一个是数组名(OUT),第二个是读取字符数。这个成员函数读取并丢弃换行符。

Eg.

 

Cin.getline(name,20);//这行包含的字符不超过19个,因为最后一个留给空字符。

这样就可以输入一行,而不用管到底有多少空格,只要字符数小于第二个参数。

8. Cin.get()

而get()这个成员函数,参数同上,但是get不再读取并丢弃换行符,而将其留在输入队列中。

       const int size = 15;

       char name1[size];

       char name2[size];

       cin.get(name1,15);

       cin.get(name2,15);

这个主要是输入一个123 123后回车,name2却没有内容,因为换行符还在输入队列中。

可以再调用一个cin.get(),跨过该输入字符,也由于cin.get(name1,15)返回的是一个cin对象,所以可以这样写cin.get(name1,15).get().

9.

       int year;

       char name1[size];

       char name2[size];

       cin>>year;

       cin.get(name1,15);

       cin.get(name2,15);

       输入年份后,就直接跳过后面的输入了,原因是输入数字后,换行还保留在输入队列中,因而需要调用个cin.get()等跨过该输入字符。

posted on 2010-05-24 22:14 batstying 阅读(162) 评论(0)  编辑 收藏 引用 所属分类: C++ Primer plus学习

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理