字符数组和字符串,char 和string定义的字符串的区别与遍历

字符数组:存储字符的数组

字符串 :是使用最频繁的字符数组,是一个特殊的字符数组

C++中并没有专门的字符串的类型,一个字符串实际上就是一个字符数组,与普通字符数组不同的是,字符串的结尾有一个字符\0,表示字符串的结束。

char 可以定义字符数组,也可以定义字符串

char 定义的字符数组

char b[]={'h','e','l','l','o'};//生命字符数组,长度为5
 
 
  • 1

char定义字符串

字符串的优势在于输入、输出和赋初值,输入输出不需要使用循坏。字符数组需要用循环依次输出每个字符。

 char b[]="hello";//定义字符串
 char *p = b;
 cout << b;//输出的是hello
 cout<<  *p;//指针指向首地址,所以输出为 h
 
 
  • 1
  • 2
  • 3
  • 4

字符数组和字符串的区别

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
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
//以下语句实现用指针输出hello。
for (size_t i = 0; i < 5; i++)
    {
        cout << *pchar;
        pchar++;
    }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

指针指向字符串

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++;
  } 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
方式二
    //
    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
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
string定义的字符串

这里需要特别注意的是string并不是一个关键字,而是一个类。 
下面代码的指针指向的是对象,而不是string中的第一个字符。

    string str="hello world";
    string *p1 = &str; //注意必须加取地址运算符 &
    cout << str << "," << *p1; //输出的是  hello world,hello world
 
 
  • 1
  • 2
  • 3
  1. 如果想访问string定义字符串中的每个字符,可以使用 str[i]
  2. cout<<p1[0];//输出的是 hello world
  3. 不可像char定义的字符串那样使用p1[i],在string中,i>0并未分配指针,这种理解方式本来就错误。
用指针遍历 每个字符
  1. 用C++的迭代器
  string str1 = "we are poor students"; 
  for (string::iterator p1 = str1.begin(); p1 !=str1.end(); p1++)
  {
    cout << *p1 ;
  }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 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);
}
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值