c++初级 之 c++的字符串string

来源:互联网 发布:怎么推广app软件 编辑:程序博客网 时间:2024/05/26 02:21
在c++中,可以直接用string类型的量。必须包含头文件#include<string>(当然不要忘了using namespace std;)

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;  } 

结果如下:



原创粉丝点击