一、字符数组
定义略
初始化方式:
1 char c[10]={'a','b','c','d','e','f','g','h','i','j'};
注:当初值个数小于规定长度时,其余元素自动填充为 '\0'
2 char c[]={'a','b','c','d','e','f','g','h','i','j'};
系统自动计算长度为10
3 char c[]="abcdefghij"; 或 char c[]={"abcdefghij"};
此时长度为11,因为创建字符串的时候最后面自动添加了'\0','\0'的ASC2码为0
字符串输出:
谨记一条,以'\0'为结束符,如以下程序是不安全的
char c[3]={'a','b','c'};
cout<
输出结果除abc外还有一系列不可预知的项
这就是c++繁杂的地方,但是我们可以以毒攻毒,c++的不安全性还有个体现就是数组可以越界操作,如
char c[3]={'a','b','c'};
c[3]='\0';
cout<
这样输出就是正常的了,当然了,这个例子只是技术探究,实际不可能这么用
cout<
char str[]="abcdefghij";
cout<
char str[]="abcdefghij";
cout<
输入时,所输字符串长度应短语数组长度,否则后果严重。
库函数:put(str),gets(str),strcat(str1,str2),strcpy(str1,str2),strcmp(str1,str2),strlen(str),strlwr(str),strupr(str)
综上,字符串数组的使用比较灵活,但安全性上实在是寒碜,只使用特别清晰、简单的小程序。
二、字符指针
初始化:
char *str="hello world!";
说到底,str是一个字符指针,这句仅仅是将“hello world!”的第一个字符的地址赋予str
cout<<*(str+4)<
cout<<*str<
cout<
道理是显然的,数据类型是字符指针的,则从所指地方开始输出直到'\0'结束,数据类型是字符的(*str)则只输出单个字符。
string本质是一个类,因此可以进行运算符的重载,还可以自定义方法,带来极大的灵活性,同时符合高内聚低耦合的程序设计原则。
使用前的准备工作:
#include
using std::string;
初始化方法:
string s2(s1);//初始化为s1的一个副本
string s("value");//常量初始化
string s(n,'c');//n个字符'c'
1 再也不用管什么字符串长度啊、越界之类的问题。
2 赋值可以用“=”直接操作,连接可用“+”直接操作,比较可用关系运算符直接操作,提升了可读性。
3 自定义方法,解耦合。
string的操作:
string str="hello";
cout<
输出:
5
0
需要指出的一点是:
str.size()返回值的类型是string::size_type,存储str.size()结果的变量必须为string::size_type类型,虽然不清楚它具体是个神马类型(连c++ primer上都这么说),但可以肯定是不同于int类型的,因为它是unsigned类型的,这样它能表示的长度是signed类型的两倍,此外肯定还有别的优越性。
下标操作的时候,str用法与数组名类似。
如非特殊需要,笔者的编程基本全部使用了此类库。