c++初级 之 c++的字符串string
来源:互联网 发布:怎么推广app软件 编辑:程序博客网 时间:2024/05/26 02:21
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; }
结果如下:
- [C/C++]_[初级]_[标准字符串std::string 所有函数的用法总结]
- c++初级 之 c语言的字符串cstring
- c++初级 之 c++的字符串string
- c++string字符串的输出
- [C/C++]_[初级]_[使用C字符串(或者std::string)处理函数获取文件所在目录
- C语言字符串函数与C++string的字符串函数
- c 字符串与C++string
- c#-string 字符串相关
- [C++]string分割字符串
- C++_字符串(string)
- C#---字符串String
- C++string字符串1.1
- C#-String字符串操作
- [C/C++标准库]_[初级]_[字符串string转换大小写]
- [C/C++标准库]_[初级]_[使用模板删除字符串前后空格((w)string space)]
- C++string类型字符串的存储方式
- 关于C++String字符串的使用
- [C/C++]_[初级]_[关于std::string的compare陷阱]
- JS td 动态事件的处理
- jQuery中字符串去前后空格和全部空格
- 深层神经网络实现--step by step 入门TensorFlow(二)
- 【原创】Selenium学习系列之(六)—Junit4中的注释和TestSuite
- 基于R-CNN的物体检测(转自 hjimce的专栏)
- c++初级 之 c++的字符串string
- 理解git中的head和master
- 03.assetbundle打包的一种用法
- 前端基础知识
- 记录自已学习之C语言存储区
- 深入理解Java类加载器(2):线程上下文类加载器
- 【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法
- 缺失值处理方法
- IntelliJ IDEA 热部署,修改java文件 不用重启tomcat