字符数组和字符串,char 和string定义的字符串的区别与遍历
2016-11-05 20:13
525 查看
字符数组:存储字符的数组
字符串 :是使用最频繁的字符数组,是一个特殊的字符数组
C++中并没有专门的字符串的类型,一个字符串实际上就是一个字符数组,与普通字符数组不同的是,字符串的结尾有一个字符\0,表示字符串的结束。char 可以定义字符数组,也可以定义字符串
char 定义的字符数组
char b[]={'h','e','l','l','o'};//生命字符数组,长度为5
char定义字符串
字符串的优势在于输入、输出和赋初值,输入输出不需要使用循坏。字符数组需要用循环依次输出每个字符。char b[]="hello";//定义字符串 char *p = b; cout << b;//输出的是hello cout<< *p;//指针指向首地址,所以输出为 h
字符数组和字符串的区别
C++中,字符数组和字符串都是通过char关键字来定义的,但二者不同,显著的区别就是字符串的长度是字符数目加1,因为包含了\0结束符,而字符数组的长度就是字符的数目。对于字符数组可以通过sizeof求出其长度,但是对于字符串是其长度加上1。因此这个长度没有意义,为此C++可以用strlen求出字符串的有效内容的长度(不含字符串结束标识\0)。指针与字符串、指针与字符数组
指针指向字符数组
char b[] = { 'h','e','l','l','o' }; char *pchar = b; cout << *pchar;//该语句输出 h //cout << b; //不要用这个方式输出,输出的是 hello加一些乱码字 cout << b[0]; //该语句输出 h
//以下语句实现用指针输出hello。 for (size_t i = 0; i < 5; i++) { cout << *pchar; pchar++; }
指针指向字符串
char定义的字符串
用char定义一个指针,并指向了char定义的字符串,那么用指针变量p 和*p输出的结果不一样,请看一下两种情况。 具体原因我也不知道。方式1
char str[] = "we are poor students";//这是一个字符串 cout<<str<<endl;//输出的是:we are poor students。这也是字符串的优点,可以整个输出。 //指针访问每个字符并输出。 char *p = str; while (*p != '\0') { cout << *p; p++; }
方式二
// char *p = str; while (*p != '\0') { cout << p<<endl; p++; } 以上语句输出的结果是: we are poor students we are poor students e are poor students are poor students are poor students re poor students e poor students poor students poor students oor students or students r students students students tudents udents dents ents nts ts s
string定义的字符串
这里需要特别注意的是string并不是一个关键字,而是一个类。下面代码的指针指向的是对象,而不是string中的第一个字符。
string str="hello world"; string *p1 = &str; //注意必须加取地址运算符 & cout << str << "," << *p1; //输出的是 hello world,hello world
如果想访问string定义字符串中的每个字符,可以使用
str[i]
cout<<p1[0];//输出的是 hello world
不可像char定义的字符串那样使用p1[i],在string中,i>0并未分配指针,这种理解方式本来就错误。
用指针遍历 每个字符
用C++的迭代器
string str1 = "we are poor students"; for (string::iterator p1 = str1.begin(); p1 !=str1.end(); p1++) { cout << *p1 ; }
用
c_str() (Get C string equivalent)函数转化为c类型的string,如下代码所示:
string str1 = "we are poor students"; const char *p = str1.c_str();//这句是关键。 for (size_t i = 0; i < str1.size(); i++) { cout << *(p + i); }
相关文章推荐
- 字符数组和字符串,char 和string定义的字符串的区别与遍历
- 字符数组和字符串,char 和string定义的字符串的区别与遍历
- 字符、字符数组、char、string的区别
- C++ 字符串string与字符数组char[ ]的异同
- Java中char数组(字符数组)与字符串String类型的转换方法
- 有关String.getBytes()和String.tocharArray()的区别 字节数组和字符数组的区别
- 字符、字符数组、char、string的区别分析
- JavaSE8基础 String toCharArray 字符串转换成字符数组
- 字符串string 字符数组与指向字符串的指针pchar的区别与联系
- string.ToCharArray() 装字符串的每个字符存入数组
- char * 与 char [] 区别,char *[] 与 char[][]区别。字符串指针的数组与二维char数组区别。字符串常量赋予指针与字符数组区别。"字符串"等价于其首元素"字"的地址
- char字符串数组与string之间的转换,以及sizeof,strlen,length的区别
- Java中char数组(字符数组)与字符串String类型的转换方法
- Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar(来自http://delphi.cjcsoft.net/论坛)
- 字符、字符数组、char、string的区别分析
- Java中char数组(字符数组)与字符串String类型的转换方法
- String中空串与null的区别#抽取方法快捷键#字节数组转化成字符串#字符数组转化成字符串
- String字符串与字符(char类型)数组互相转换
- 【转】字符、字符数组、char、string的区别分析
- 数组与指针定义字符串的区别(即char[]与char*)