在C语言中,用0结束的字符数组表示字符串,有些不方便:1)数组定义后大小不能改变;2)存入的内容只能比数组小,不能大,若是不当心存多了,会引发内存的溢出,这些问题让程序员有些郁闷。程序员
C++的string属于STL(Standard Template Library,标准模板库)中的定义的类,它会随存放字符的长度自动伸缩,程序员没必要担忧内存溢出的问题,string类还和C语言的字符串之间还能够很方便的转换。数据库
首先,为了在程序中使用string类,必须包含头文件 \<string\>。以下:数组
#include <string>
注意这里不是string.h,string.h是C语言字符串头文件。ide
string是一个模板类,位于std命名空间内,为方便使用还须要在程序中增长:函数
using namespace std; // 指定缺省的使名空间。 string str; // 建立string对象。
若是不指定命名空间,也就是说没有using namespace std,建立string对象的方法以下:测试
std::string str;
示例(book215.cpp)spa
/* * 程序名:book215.cpp,此程序用于演示C++string类。 * 做者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include <stdio.h> #include <string.h> #include <string> using namespace std; int main () { char str1[31]; // C语言风格的字符串。 memset(str1,0,sizeof(str1)); strcpy(str1,"西施"); string str2; // C++的string字符串 str2="沉鱼"; // 对str2赋值 printf("str2=%s\n",str2.c_str()); // 判断str2和str1是否相等 if (str2!=str1) printf("str2=%s,str1=%s,不相等。\n",str2.c_str(),str1); strcpy(str1,str2.c_str()); // 把string的内容赋值给C语言风格的字符串。 printf("str1=%s\n",str1); }
运行效果.net
能够用=直接赋值。code
能够用 ==、\>、\<、\>=、\<=、和!=比较字符串。对象
能够用+或者+=操做符链接两个字符串。
能够用[]获取指定位置的字符,相似数组。
const char *c_str();
string类采用动态分配内存的方式来存放字符串,c_str函数返回这个字符串的地址。
std::string str1; str1="hello world"; char str2[31]; strcpy(str2,str1.c_str());
可用下列函数来得到string的一些特性。
int size(); // 返回当前字符串的大小。 int length(); // 返回当前字符串的长度,注意和size的区别。 void clear(); // 清空字符串。
string提供了上百个成员函数,很是丰富,丰富得有点眼花,各位本身找资料,有空的时候再研究一下,断章取义的使用。
string是一个类,经过动态分配内存,实现对字符串的存储,咱们来看如下代码。
示例(book216.cpp)
/* * 程序名:book216.cpp,此程序用于演示C++的string类的字符串的地址。 * 做者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include <stdio.h> #include <string> int main () { std::string str; str="www"; printf("%p\n",str.c_str()); str=str+".freecplus"; printf("%p\n",str.c_str()); str="freecplus"; printf("%p\n",str.c_str()); str="www.freecplus.net"; printf("%p\n",str.c_str()); }
运行效果
经过以上的例子,咱们能够看到,string对象用于存放字符的内存地址是变化的,当前空间若是不足,就从新分配一个新的内存,同时会释放以前的内存,不是什么神奇的技术。
C++的string类是一个变长的字符串,不须要程序员担忧内存溢出的问题,还提供了不少字符串操做函数,初学者可能会想,用它取代C语言中的字符串(以0结尾的字符数组)必定是个很好的主意。我要告诉各位,这是不可能的,由于string中的字符串存储的内存空间没有固定的位置(它也没办法有固定位置)。
对初学者来讲,用C/C++写一些简单的程序,作一些简单的事情,不懂得实际项目开发的需求,例如Oracle和MySQL数据库提供的接口,在交换数据的时候须要绑定一个固定的地址,string是作不到的。
个人建议是采用string存放一些须要动态分配内存的临时数据,避开动态内存技术带来的坑,而后转换为C的字符串。C的字符串没有string类那么丰富的成员函数,这个不是问题,咱们能够本身写,这也是我不想介绍string成员函数的缘由,与其花时间去研究string的成员函数,还不如本身写一个。
了解string类的原理和一些用得着的成员函数就能够了,没必要太深刻研究,意义不大。
上网找C++string的资料,看看它的成员函数和重载的操做符,若是以为有用,就编写代码测试一下,了解一下大概状况。
C语言技术网原创文章,转载请说明文章的来源、做者和原文的连接。
来源:C语言技术网(www.freecplus.net)
做者:码农有道
若是这篇文章对您有帮助,请点赞支持,或在您的博客中转发个人文章,谢谢!!!若是文章有错别字,或者内容有错误,或其余的建议和意见,请您留言指正,很是感谢!!!