C++_字符串类型

C++提供了两种字符串的表示。

 

C风格字符串

=============================

  • 字符串被存储在一个字符数组中,一般通过一个char*类型的指针来操纵它。所以一般看到一个char*类型的指针,那就是C风格的字符串。该char*类型的指针指向的就是是该字符数组的第一个元素。


const char *st = "The expense of spirit\n";

  • 如果想通过该指针来访问该字符串就要用到解引用符(*)。再配合循环语句和自增符(++)使用就可以实现访问字符数组中的单个字符了。

        由于C 风格字符串的底层(low-level)特性, C 或C++的初学者很容易在这上面出错。要特别注意解引用以及指针位置的计算。

int string_length( const char *st )
{
    int cnt = 0;
    if ( st ) //一般来说当我们使用一个指针时,在解除指针的引用之前测试它是否指向某个对象是必要的
        while ( *st++ ) //st被解引用,除了空字符外的任意字符都返回true值.注意:先计算++,再解引用
            ++cnt; 
    return cnt;
}

 

  • 标准C库为操纵C风格的字符串提供了一组函数。为使用这些函数,我们必须包含相关的C头文件 #include <cstring>
// 返回字符串的长度
int strlen( const char* );
// 比较两个字符串是否相等
int strcmp( const char*, const char* );
// 把第二个字符串拷贝到第一个字符串中
char* strcpy(char*, const char* );

 

 

 

字符串类型(标准C++引入的string类类型)

================================

因为字符指针的底层特性,用它表示字符串很容易出错。为了将程序员从许多与使用C风格字符串相关的错误中解脱出来,C++标准库提供
了字符串类抽象的一个公共实现。

  • 特点:

        1. 支持用字符序列或第二个字符串对象来初始化一个字符串对象。string str3( str1 );  而C风格的字符串不支持。

        2. 支持字符串之间的拷贝。=

        3. 支持读写访问单个字符。通过下标操作符实现。 str[i]

        4. 支持两个字符串的相等比较。 ==

        5. 支持两个字符串的连接: 把一个字符串接到另一个字符串上, 或将两个字符串组合起来形成第三个字符串。 + 或 +=

        6. 支持对字符串长度的查询。size()

        7. 支持字符串是否为空的判断。empty()

 

  • 要使用string类型,必须先包含相关的头文件:  #include <string>

 

  • string本质还是一个字符数组,所以迭代器begin() 和end()都可以用在string对象上。
replace( str.begin(), str.end(), '.', '_' ); 
//replace()扫描begin()和end()之间的字符。每个等于句号的字符都被替换成下划线

 

string对象与C风格字符串混用、转换

=================================

  • 为了提高string对象的重用性,我们可以使用string对象与C风格字符串混用的方式。

string s1( "hello, " );
string s2( "world\n" );

string s3 = s1 + s2;

       换成:

const char *pc = ", ";
string s1( "hello" );
string s2( "world" );
string s3 = s1 + pc + s2 + "\n";

        这种连接策略比较受欢迎因为它使s1 和s2 处于一种更容易被重用的形式。

 

  • 转换:

        string类型可以自动将C风格的字符串转化成string对象,例如:

          string s1;

          const char *pc = “a character array”;

          s1 = pc;

        但是string对象却不能自动转换成C风格字符串。可以通过c_str()来转换。

        const char *str = s1.c_str(); //c_str()返回了一个指向常量数组的指针, 所以str必须要加上常量修饰符

原文链接: https://www.cnblogs.com/JaneTang/archive/2010/02/11/1667525.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++_字符串类型

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/8171

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午6:50
下一篇 2023年2月6日 下午6:52

相关推荐