• C++字符串总结



    C++处理字符串的方式有两种。第一种来自C语言,常被称为C-风格字符串(C-style string)。另一种基于string类库。

    字符数组

    存储在连续字节中的一系列字符意味着可以将字符串存储在char数组中,其中每个字符都位于自己的数组元素中。
    C-风格字符串具有一种特殊的性质:以空字符(null character)结尾,空字符被写作,其ASCII码为0,用来标记字符串的结尾。

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	char a[8] = { 'a','b','c','d','e','f','g','h' };
    	char b[8] = { 'a','b','c','d','e','f','g','' };
    
    	cout << a << endl;
    	cout << b << endl;
    	return 0;
    }
    


    这两个数组都是char数组,但只有第二个数组是字符串。空字符对C-风格字符串而言至关重要。
    C++有很多处理字符串的函数,其中包括cout使用的那些函数。它们都逐个地处理字符串中的字符,直到到达空字符为止。
    如果使用cout显示上面的b这样的字符串,则将显示前7个字符,发现空字符后停止。但是,如果使用cout显示上面的数组a(它不是字符串),cout将打印出数组中的8个字母,并接着将内存中随后的各个字节解释为要打印的字符,直到遇到空字符为止。由于空字符(实际上是被设置为0的字节)在内存中很常见,因此这一过程将很快停止。但尽管如此,还是不应将不是字符串的字符数组当作字符串来处理。

    字符串常量

    除了以上这种方法(使用大量单引号,且必须记住加上空字符)之外,还有一种更好的、将字符数组初始化为字符串的方法—只需使用一个用引号括起的字符串即可,这种字符串被称为字符串常量。
    如下所示:

    char c[8] = "abcdefg";
    char d[] = "abcdefg";
    

    用引号括起的字符串隐式地包括结尾的空字符,因此不用显式地包括它。当然,应确保数组足够大,能够存储字符串中所有字符—包括空字符。使用字符串常量初始化字符数组是这样的一种情况,即让编译器计算元素数目更为安全。让数组比字符串长没有什么害处,只是会浪费一些空间而已。这是因为处理字符串的函数根据空字符的位置,而不是数组长度来进行处理。C++对字符串长度没有限制。
    字符串常量与字符常量
    注意,字符串常量(使用双引号)不能与字符常量(使用单引号)互换。字符常量(如'S')是字符串编码的简写表示。在ASCII系统上,'S'只是83的另一种写法。但"S"不是字符常量,它表示的是两个字符(字符S和)组成的字符串。"S"实际上表示的是字符串所在的内存地址。
    字符串常量的拼接
    有时候,字符串很长,无法放到一行中。C++允许拼接字符串字面值,即将两个用引号括起的字符串合并为一个。事实上,任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。
    因此,下面所有的输出语句都是等效的:

    cout << "abcde" "fghijk
    ";
    cout << "abcdefghijk
    ";
    cout << "abcdefg"
    	"hijk
    ";
    


    注意,拼接时不会在被连接的字符串之间添加空格,第二个字符串的第一个字符将紧跟在第一个字符串的最后一个字符(不考虑)后面。第一个字符串中的字符将被第二个字符串的第一个字符取代。

  • 相关阅读:
    lnmp vhost 虚拟目录配置
    vi 编辑器常用命令(转)
    centos7 nginx 加入开机启动
    centos7 编译安装mysql
    IE8以下支持css3 border-radius渲染方法
    html5 web 摇一摇切换歌曲
    L0、L1与L2范数
    c++多线程编程:常见面试题
    核函数以及SVM相关知识(重点)
    梯度下降法的三种形式BGD、SGD以及MBGD
  • 原文地址:https://www.cnblogs.com/cyx-b/p/13806312.html
Copyright © 2020-2023  润新知