c/c++ 字符数组、字符指针和字符串类型总结帖
2012-07-23 18:33
567 查看
一、字符数组
定义略
初始化方式:
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'为结束符,如以下程序是不安全的
这就是c++繁杂的地方,但是我们可以以毒攻毒,c++的不安全性还有个体现就是数组可以越界操作,如
库函数:put(str),gets(str),strcat(str1,str2),strcpy(str1,str2),strcmp(str1,str2),strlen(str),strlwr(str),strupr(str)
综上,字符串数组的使用比较灵活,但安全性上实在是寒碜,只使用特别清晰、简单的小程序。
二、字符指针
初始化:
char* c和char c[]的区别在于前者是变量,后者是常量。
三、c++提供的标准库string
string本质是一个类,因此可以进行运算符的重载,还可以自定义方法,带来极大的灵活性,同时符合高内聚低耦合的程序设计原则。
使用前的准备工作:
在使用的时候,只需把string当成一个基本类型就可以了,这样做有两个极大的好处:
1 再也不用管什么字符串长度啊、越界之类的问题。
2 赋值可以用“=”直接操作,连接可用“+”直接操作,比较可用关系运算符直接操作,提升了可读性。
3 自定义方法,解耦合。
string的操作:
5
0
需要指出的一点是:
str.size()返回值的类型是string::size_type,存储str.size()结果的变量必须为string::size_type类型,虽然不清楚它具体是个神马类型(连c++ primer上都这么说),但可以肯定是不同于int类型的,因为它是unsigned类型的,这样它能表示的长度是signed类型的两倍,此外肯定还有别的优越性。
下标操作的时候,str用法与数组名类似。
如非特殊需要,笔者的编程基本全部使用了此类库。
定义略
初始化方式:
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<<c<<endl;输出结果除abc外还有一系列不可预知的项
这就是c++繁杂的地方,但是我们可以以毒攻毒,c++的不安全性还有个体现就是数组可以越界操作,如
char c[3]={'a','b','c'}; c[3]='\0'; cout<<c<<endl;这样输出就是正常的了,当然了,这个例子只是技术探究,实际不可能这么用
cout<<sizeof(c);//输出为数组固定值
char str[]="abcdefghij"; cout<<sizeof(str)<<endl;//输出11
char str[]="abcdefghij"; cout<<strlen(str)<<endl;//输出10输入时,所输字符串长度应短语数组长度,否则后果严重。
库函数: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)<<endl;//这句输出的是 o
cout<<*str<<endl;//这句输出 h
cout<<str<<endl;//这句输出hello world!道理是显然的,数据类型是字符指针的,则从所指地方开始输出直到'\0'结束,数据类型是字符的(*str)则只输出单个字符。
char* c和char c[]的区别在于前者是变量,后者是常量。
三、c++提供的标准库string
string本质是一个类,因此可以进行运算符的重载,还可以自定义方法,带来极大的灵活性,同时符合高内聚低耦合的程序设计原则。
使用前的准备工作:
#include<string> using std::string;初始化方法:
string s2(s1);//初始化为s1的一个副本 string s("value");//常量初始化 string s(n,'c');//n个字符'c'
在使用的时候,只需把string当成一个基本类型就可以了,这样做有两个极大的好处:
1 再也不用管什么字符串长度啊、越界之类的问题。
2 赋值可以用“=”直接操作,连接可用“+”直接操作,比较可用关系运算符直接操作,提升了可读性。
3 自定义方法,解耦合。
string的操作:
string str="hello"; cout<<str.size()<<endl;//长度检测 cout<<str.empty()<<endl;//检测是否为空输出:
5
0
需要指出的一点是:
str.size()返回值的类型是string::size_type,存储str.size()结果的变量必须为string::size_type类型,虽然不清楚它具体是个神马类型(连c++ primer上都这么说),但可以肯定是不同于int类型的,因为它是unsigned类型的,这样它能表示的长度是signed类型的两倍,此外肯定还有别的优越性。
下标操作的时候,str用法与数组名类似。
如非特殊需要,笔者的编程基本全部使用了此类库。
相关文章推荐
- c/c++ 字符数组、字符指针和字符串类型总结帖
- c/c++ 字符数组、字符指针和字符串类型
- C/C++(字符串处理)字符指针、字符数组用法大总结
- C/C++(字符串处理)字符指针、字符数组用法大总结
- 一道二级C题引发的思考-- c++函数传递指针的本质 与 字符串指针与字符数组的区别
- 字符串、字符数组、数组、指针关系总结
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(1)
- 字符串的存储方式,以及sizeof()(字符数组,字符指针,Sizeof总结)
- C++ 字符数组和字符指针和字符串
- 字符数组与字符串,字符数组与字符指针(总结大全)
- 关于字符串类型与字符数组(指针)
- 指针数组和字符类型的二维数组在处理字符串时的区别
- c中给字符数组,字符串指针赋值的方法总结
- c中给字符数组,字符串指针赋值的方法总结
- C++字符数组、字符指针、strlen、sizeof总结
- C、C++字符数组,字符指针,sizeof,strlen总结
- 关于C中字符数组,字符指针以及C++中string类型的两两转换及排序
- C/C++的一些关于字符数组和指针的小总结
- (总结)C++与java比较教程--7.2 C++中声明指针类型和指针数组(待补充)
- 数组与字符串、字符指针与其他类型指针、赋值参数、指针参数以及引用参数、函数指针