此网站为连连棋牌演示网站
当前位置:首页 > C++ > 正文

C++ 字符串

12-02 C++

  C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

  下面的声明和初始化创建了一个 Hello 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 Hello 的字符数多一个。

  其实,您不需要把null字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。让我们尝试输出上面的字符串:

  C++ 标准库提供了string类类型,支持上述所有的操作,另外还增加了其他更多的功能。我们将学习 C++ 标准库中的这个类,现在让我们先来看看下面这个实例:

  现在您可能还无法透彻地理解这个实例,因为到目前为止我们还没有讨论类和对象。所以现在您可以只是粗略地看下这个实例,等理解了面向对象的概念之后再回头来理解这个实例。

  C++ 中输入的方式其实还有很多,下面来介绍一种与 C 语言中 getchar() 类似的。

  cin.getline()是在输入一段字符完成后开始读取数据(注意,是输入完成后,以Enter为结束标志)

  下面是一实例:输入一串字符,编程统计其中的数字个数和英文字母个数。输入的字符以#为结束标志。

  任何改变vector长度的操作都会使已存在的迭代器失效。如:在调用push_back之后,就不能再信赖指向vector的迭代器了

  之前一直搞不清 sizeof 和 strlen 到底该怎么区分,最近查了资料:

  1、sizeof 操作符的结果类型是 size_t,它在头文件中 typedef 为 unsigned int 类型。该类型保证能容纳实现所建立的最大对象的字节大小。

  3、sizeof 可以用类型做参数,strlen只能用char*做参数,且必须是以\0结尾的。

  5、大部分编译程序在编译的时候就把sizeof计算过了,是类型或是变量的长度,这就是sizeof(x)可以用来定义数组维数的原因。

  6、strlen 的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。

  7、sizeof 后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

  8、当适用一个结构类型或变量时, sizeof 返回实际的大小;当适用一静态地空间数组, sizeof 归还全部数组的尺寸;sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸。

  数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址, 如:

  在 C++ 里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小。

  看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:

  char* ss = 0123456789; sizeof(ss) 结果 4 ===》ss 是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是 4。 sizeof(*ss) 结果 1 ===》*ss 是第一个字符 其实就是获得了字符串的第一位 0 所占的内存空间,是 char 类型的,占了 1 位 strlen(ss)= 10 ===》 如果要获得这个字符串的长度,则一定要使用 strlen。strlen 用来求字符串的长度;而 sizeof 是用来求指定变量或者变量类型等所占内存大小。

  关于字符数组为什么可以以数组名来用cout输出数组内容,而普通数组不行。

  从以上范例可以看出,普通数组中以数组名用cout来输出,只会得到一串地址;用字符数组则会输出数组中的内容。

  答案:因为char型数组中的每一个元素都是一字节,所以每一个字符之间的地址都是 +1 的是连续的,所以当 cout 输出时读到字符数组中的\0便停止输出; 而 int 数组每个元素占 4 个字节所以数个数组中每个元素地址的间隔是 4,但其实它也是连续的,出现乱码是因没找到结束符。

版权保护: 本文由 首页 原创,转载请保留链接: http://www.wsxzr.com/News/303.html

博客主人bfyysw
男,文化程度不高性格有点犯二,已经20来岁至今未婚,闲着没事喜欢研究各种代码,资深技术宅。
  • 文章总数
  • 37839访问次数
  • 建站天数
  • 标签