1.
#include <cstring> //不能够定义string s;能够用到strcpy等函数
using namespace std;
#include <string> //能够定义string s;能够用到strcpy等函数
using namesapce std;ios
#include <string.h> //不能够定义string s;能够用到strcpy等函数c++
2.api
1)文件cstring,和string.h对应,c++版本的头文件,包含好比strcpy之类的字符串处理函数
2)文件string.h,和cstring对应,c版本的头文件,包含好比strcpy之类的字符串处理函数
3)文件string,包含std::string的定义,属于STL范畴
4)CString,MFC里的的字符串类
string.h是C语言中字符串操做函数的头文件
cstring是c++对C语言中的strcpy之类的函数申明,包含cstring以后,就能够在程序中使用C语言风格的strcpy之类的函数。函数
string是c++语言中string类模板的申明
CString是MFC中定义的字符串类,MFC中不少类及函数都是以CString为参数的,另外CString类重载了(LPCSTR)运算符,因此若是你在MFC下面使用CString类,就能够直接用CString类作为参数来调用须要一个C语言风格字符串的win api函数,编译器会自动调用(LPCSTR)成员函数完成从CString到一个C风格字符串的转换。若是你在MFC下使用C++语言中标准的 string类,那么在调用须要C语言风格的字符串为参数的win api时,你必须显示调用sting.c_str()成员函数,来完成一样的转换,也就是说在使用MFC里,若是用CString类,会比sting类方便那么一点点。spa
3.字符串
(1).首先说cstring与string.h:
cstring和string.h其实里面都是C标准库提供的东西,某些实现中cstring的内容
就是:
namespace std
{
#include <string.h>
}
cstring是C++的组成部分,它能够说是把C的string.h的升级版,但它不是C的组成部分。
因此若是你用的是C++,那么请用cstring,若是你用的是C请用string.h。
(2).string与cstring:
通常一个C++库老的版本带“.h”扩展名的库文件,好比iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好多改进以外,还有一点就是后者的东东都塞进了“std”名字空间中。
string,它是C++定义的std::string所使用的文件,是string类的头文件,属于STL范畴。它有不少对字符串操做的方法。
4.string.h是C++标准化(1998年)之前的C++库文件,在标准化过程当中,为了兼容之前,标准化组织将全部这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀而且去掉了.h的后缀名,因此string.h头文件成了cstring头文件。可是其实现倒是相同的或是兼容之前的。至关于标准库组织给它盖了个章,说“你也是个人标准程序库的一份子了”
5.cstring表明的是string.h,可是被封装到了std里面,譬如调用strlen函数,须要写成std::strlen(yourstr)才行,这个使用方法比较符合C++的标准要求string就是C++标准库里面的string模板(确切地说应该是一个特化的模板),可是他一样包含了C风格字符串操做函数的定义(应该是经过包含string.h实现的)string.h就不须要使用名字空间了,这个是C风格字符串操做的一个函数库,strlen,strcpy,strcat,strcmp……都在这里面了,不过既然是C风格的库,固然不须要namespace支持了。编译器