混合使用C 风格的字符串与string 对象如下所示
const char *pc = ", ";
string s1( "hello" );
string s2( "world" );
string s3 = s1 + pc + s2 + "/n";
这种连接策略比较受欢迎因为它使s1 和s2 处于一种更容易被重用的形式这种方法
能够生效是由于string 类型能够自动将C 风格的字符串转换成string 对象
例如这使我们可以将一个C 风格的字符串赋给一个string 对象
string s1;
const char *pc = "a character array";
s1 = pc; // ok
但是反向的转换不能自动执行,对隐式地将string 对象转换成C 风格的字符串string
类型没有提供支持。例如下面试图用s1 初始化str 就会在编译时刻失败
char *str = s1; // 编译时刻类型错误
为实现这种转换必须显式地调用名为c_str()的操作
char *str = s1.c_str(); // 几乎是正确的但是还差一点
名字c_str()代表了string 类型与C 风格字符串两种表示法之间的关系,字面意思是给我一个C 风格的字符串表示——即指向字符数组起始处的字符指针。但是这个初始化还是失败了,这次是由于另外一个不同的原因:
为了防止字符数组被程序直接处理,c_str()返回了一个指向常量数组的指针const char*
str 被定义为非常量指针所以这个赋值被标记为类型违例正确的初始化如下
const char *str = s1.c_str(); // ok
string 类型支持通过下标操作符访问单个字符例。如在下面的代码段中字符串中的所有句号被下划线代替
string str( "fa.disney.com" );
int size = str.size();
for ( int ix = 0; ix < size; ++ix )
if ( str[ ix ] == '.' )
str[ ix ] = '_';