C++中string类的定义如下:
typedef basic_string<char> string;
对于C++来说,string类型的每个元素都是char类型,如:
string a = "xyz";
char c = a[0];
两个字面量的字符串是不能相加的
string a = "x" + "y";
错误 error:
invalid operands of types 'const char [2]' and 'const char [2]' to binary 'operator+'
也就是加号(+)没有被重载。
由于string也是一种容器,所以string也有push_back(),pop_back()等函数,其内容就是string的组成char,注意这里只能push_back(char),【不能push_back(string),这是错误的】
string a;
char b = 'y';
a.push_back('x');
a.push_back(b);
C++中有者严格的字符串string 和字符char的区分:
双引号("") 就是const char* 类型的常量字符串字面量。
单引号(’’)就是const char 类型的常量字符字面量。
char b = "y";
错误 error:
invalid conversion from 'const char*' to 'char'
string a ='x';
错误 error:
conversion from 'char' to non-scalar type 'std::__cxx11::string'
虽然加号(+)的重载没有两个字符串相加的情况,但是string类提供了加号(+)的重载:
string a = "x";
a = a + "y";
并且此重载还可以加入字符:
string a = "x";
a = a + 'y';
对于字符串中只有单个字符的,仍然是字符串,不能看成字符。如:
string a = "a";
printf("%d",a);
输出:6422000
char a = 'a';
printf("%d",a);
输出:97
在C++中,string是一个类,不需要像C语言那样使用一个\0来标识字符串结束,所以\0对于string来说不是必须的,string类使用类属性来记录字符串长度。
在string类中定义如下:
size_type
size() const _GLIBCXX_NOEXCEPT
{ return _M_string_length; }
并且size()函数和length()函数一样:
size_type
length() const _GLIBCXX_NOEXCEPT
{ return _M_string_length; }
string与C语言字符串转换问题:
在string类中有如下函数:【是将string转为char*类型】
const _CharT*
c_str() const _GLIBCXX_NOEXCEPT
{ return _M_data(); }
const _CharT*
data() const _GLIBCXX_NOEXCEPT
{ return _M_data(); }
string a="abcdef";
const char* x = a.data();
printf("%s",x);
string a="abcdef";
const char* x = a.c_str();
printf("%s",x);
既然%s能够打印出来,说明返回的字符串已经有了\0结尾。
然而string本身并不能被%s打印:
string a="abcdef";
printf("%s",a);
打印不出任何结果,无显示
至于将char*转为string,是任何时候都可以转的。
char* a="abcdef";
string b;
b=a;
char* a="abcdef";
string b = a;
但是此时会报一个警告:
warning: ISO C++ forbids converting a string constant to 'char*'
如下形式,就不会引起警报:
const char* a="abcdef";
string b = a;
因为一个string constant,是const char* 类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)