string类属于标准模板库(STL),可以看作是系统预先写好的一个类,目的是为了简化对字符串的操作,我们可以实例化出string的对象然后进行一系列操作。
操作可以参考c++字符串的定义、赋值及各种操作函数:http://www.jb51.net/article/41725.htm
与c语言的字符串cstring的区别:
1.cstring是char[]或者char*类型的,而c++的字符串是string类型的。
2.像strcpy、strlen等一些操作cstring的函数的参数类型一般都是char*或者const char*,它们是不能操作c++的string类型字符串的。
3.同样size()、length()等一些string类的成员函数也只有string类才能用,cstring不能用。
4.cstring的标识符有双重身分:字符数组和指向字符串的指针。所以*cstring、&cstring都可以,分别是取指针cstring(指向首元素)的内容和取字符数组cstring的首地址。而c++的string没有双重身分,它就是字符串类型变量,所以&string取字符串首地址是可以的,但*string不可以,因为它不是指针。
转换:C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加'\0'。c_str()返回一个以‘\0'结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或 字符数组内。C++字符串并不以'\0'结尾。
建议:是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。
以下为例:
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
int main()
{
string name("xxx"); //定义和赋初值的方法很多,也可以不赋初值
cout << "please input your name:";
getline(cin,name); //用getline(istream&,string&),会录入回车符或文本结尾以前的所有字符(包括空格),若不输入name直接敲回车,则赋给name一个空字符。
//cin >> name;//则以空格或回车为结尾,无法录入空格字符
if(name.empty()){ //name == ""与name.empty()等价
cout << "your name is empty!" << endl;
system("pause");
return 0;
}
name = "axb";//可以等号直接赋值。
//strcpy(name,"zxb");//报错,string类型字符串不可用
for(int i = 0;i < name.length()+1;i++){
cout << name[i] << ",";
} //用[]索引时,索引最大值为length,name[name.length()]是'\0',输出显示'a'。若超过,则执行时会出错
cout << endl;
for(int i = 0;i < name.length();i++){
cout << name.at(i) << ",";
} //用at()索引时,索引最大值为length-1,即不能访问结尾符'\0'。若超过,则执行出错。
cout << endl;
cout << "welcome" + name << endl; //字符串类型变量可以直接和字符串常量或变量作加减合并
cout << name + name << endl;
//cout << "aaa" + "ss" << endl; //报错,两个字符串常量不能直接加
cout << &name << endl;//输出首元素地址
//cout << *name << endl;//报错,这是string类型字符串和cstring的重要区别,cstring的标识符有双重身分,可以当指针一样取内容;但string不可以当作指针,用*取其内容
for(int i = 0;i < 3;i++){
cout << &(name[i]) << endl;
}//输出"axb""xb""b"
cout << *(&name) << endl;//输出axb
cout << sizeof(name) << endl;//输出系统给一个string类型变量分配的固定大小空间为28,不会因为存的字符串改变而改变
//cout << strlen(name) << endl;//报错,strlen等cstring的参数是char*或const char*类型,string类型不可用
cout << "the length of your name is:" << name.size() <<endl;//也可以用name.length() 输出3
system("pause");
return 0;
}
结果如下: