Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >头文件string的作用_cstring头文件的作用

头文件string的作用_cstring头文件的作用

作者头像
全栈程序员站长
发布于 2022-09-30 03:15:29
发布于 2022-09-30 03:15:29
5K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

1.string与cstring有什么区别

代码语言:javascript
代码运行次数:0
运行
复制

<string>是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_string<char>的typedef),用于字符串操作。 <cstring>是C标准库头文件<string.h>的C++标准库版本,包含了C风格字符串(NUL即’\0’结尾字符串)相关的一些类型和函数的声明,例如strcmp、strchr、strstr等。<cstring>和<string.h>的最大区别在于,其中声明的名称都是位于std命名空间中的,而不是后者的全局命名空间。 看定义就知道了,string是新标准,定义了namespace std;而cstring虽然也是新标,但是定义中包含的是string.h。 string中可以进行+ = += >等运算,而cstring中不能进行相关运算。

1.

#include <cstring> //不可以定义string s;可以用到strcpy等函数

using namespace std;

#include <string> //可以定义string s;可以用到strcpy等函数 using namesapce std;

#include <string.h> //不可以定义string s;可以用到strcpy等函数

2.

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类方便那么一点点。

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支持了。

2.C++中string和string.h的作用和区别

#include < string .h >

void main(){string aaa = ” abcsd d ” ;printf( ” looking for abc from abcdecd %s\n ” ,(strcmp(aaa, ” abc ” )) ? ” Found ” : ” Not Found ” );

}

不能正确实行,提示说是string 类型没有定义

而下面:

#include < string >

using namespace std;void main(){string aaa = ” abcsd d ” ;printf( ” looking for abc from abcdecd %s\n ” ,(strcmp(aaa, ” abc ” )) ? ” Found ” : ” Not Found ” );}

这里的string编译器就认识了,可是strcmp就不认识了呢?

一般一个C++的老的带“。h”扩展名的库文件,比如 iostream.h,在新标准后的标准库中都有一个不带“。h”扩展名的 相对应,区别除了后者的许多改进之外,还有一点便是后者的东东都塞进了 “std”名字空间中。

但仅有string分外。

问题在于 C++要兼容C的标准库,而C的标准库里可巧也已经有一个名字叫做 “string.h”的头文件,包含一些常用的C字符串处置函数,比如楼 主说到的strcmp.

这个头文件跟C++的string类半点联络也没有,所以并非的“晋级版别”,他们是毫无 联络的两个头文件。

要抵达楼主的目的,比如一同:

#include < string .h >#include < string >using namespace std;

或许

#include < cstring >#include < string >C++中string和string.h的作用和区别(2)笑谈(来自高 质量++)

C++标准库很大。非常大。难以置信的大。如何个大法?这么说 吧:在C++标准中,关于标准库的标准说明占了密密麻麻300 多页,这还不包含 标准C 库,后者只是”作为参看”(老实说,原文便是用的这个词)包 含在C++库中。当然,并非总是越大越好,但在如今的情况下,确实越大越好, 因为大的库会包含许多的功用。标准库中的功用越多,开发自个的应用程序时能 凭仗的功用就越多。C++库并非供应了悉数(很明显的是,没有供应并发和图形 用户接口的支撑),但确实供应了许多。几乎任何事你都可以求助于它。在归纳 标准库中有些啥之前,需要介绍一下它是怎样组织的。因为标准库中东西如此 之多,你(或象你相同的其他啥人)所选择的类名或函数名就很有可以和标准 库中的某个名字相同。为了避免这种情况所构成的名字冲突,实习上标准库中的 悉数都被放在名字空间std 中(参见条款28)。但这带来了一个新问题。许多现 有的C++代码都依赖于运用了多年的伪标准库中的功用,例如,声明在,,等头文件中的功 能。现有软件没有关于运用名字空间而进行描写,如果用std 来包装标准库致使 现有代码不能用,将是一种廉耻举动。(这种釜底抽薪的做法会让现有代码的程 序员说出比”廉耻” 更尖锐的话)慑于被激怒的程序员会发作的损坏 力,标准委员会决定为包装了std 的那有些标准库构件创立新的头文件名。生成 新头文件的方法只是是将现有C++头文件名中的。h 去掉,方法本身不重要,正 如结尾发作的效果不一致也并不重要相同。所以变成了,变成了,等等。关于C 头文件,选用相同的方法,但在每个名字前还要添加一个c.所以C 的变成了,变成了,等等。结尾一点是,旧的C++头文件是官方所敌对运用的(即 ,明晰列出不再支撑),但旧的C 头文件则没有(以坚持对C 的兼容性)。实习 上,编译器制造商不会间断对客户现有软件供应支撑,所以可以估量,旧的C++ 头文件在将来几年内仍是会被支撑。

所以,实习来说,下面是C++头文件 的现状:

旧的C++头文件名如将会继续被支撑,尽管 它们不在官方标准中。这些头文件的内容不在名字空间std 中。

新的C++ 头文件如包含的根本功用和对应的旧头文件相同,但头文件的 内容在名字空间std 中。(在标准化的过程中,库中有些有些的细节被修改了, 所以旧头文件和新头文件中的实体不一定完全对应。)

标准C 头文件如继续被支撑。头文件的内容不在std 中。

具有C 库功用 的新C++头文件具有如这样的名字。它们供应的内容和相应的旧C 头文件相同,只是内容在std 中。

所有这些初看有点怪,但不难习气它 。最大的应战是把字符串头文件理理解:

是旧的C 头 文件,对应的是依据char*的字符串处置函数;

是对应 于旧C 头文件的std 版别;

是包装了std 的C++头文件, 对应的是新的string 类。

如果能掌握这些(我相信你能),其他的也就 简略了

3. string和CString 的比较  

(一) 概述   string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;   CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);   char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;   (二) 构造   2 string是方便的,可以从几乎所有的字符串构造而来,包括CString和char*;   2 CString次之,可以从基本的一些字符串变量构造而来,包括char*等;   2 char*没有构造函数,仅可以赋值;   2 举例:   char* psz = “joise”;   CString cstr( psz );   string str( cstr );   (三) 运算符重载   a) operator=   2 string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;   2 CString次之,可以直接用些基本的字符串赋值,包括char*等;   2 char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;   2 举例:   char *psz = NULL;   psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样   memset( psz, 0, 10 );   strcpy( psz, “joise” );   CString cstr;   cstr = psz;   string str;   str = psz;   str = cstr;   delete []psz;   b) operator+   2 string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str + cstr是非法的,须转换成char*;   2 char*没有+运算,只能使用strcat把两个指针连在一起;   2 举例:   char* psz = “joise”;   CString cstr = psz;   cstr = cstr + psz;   string str = psz;   str = str + str + psz;   strcat( psz, psz );   strcat( psz, cstr );//合法   strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行   c) operator +=   2 string是最强大的,几乎可以与所有的字符串变量+=,包括CString和char*;   2 CString次之,可以与基本的一些字符串变量进行+=而来,包括char*等;   2 char*没有+=运算符,只能使用strcat把两个指针连在一起;   d) operator[]   2 CString最好,当越界时会抛出断言异常;   2 string与char*下标越界结果未定义;   2 举例:   char* psz = “joise”;   CString cstr = psz;   cout << cstr[8];   string str = psz;   cout << str[8];   cout << psz[8];   e) operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=   2 CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;    cout << ( psz == cstr );    cout << ( psz == str );    cout << ( str == psz );    cout << ( cstr == psz );//以上代码返回均为1   (四) 常用算法   a) 查找   作用   char*   string   CString   查找指定值   strchr   strstr   strrstr   strspn   find   Find   第一个匹配的值     fild_first_of   FindOneOf   从后面开始查找   ReserveFind   指定匹配方式     find_if     注:find_if中是把范围内的值挨个代入匹配函数直至返回true   b) 比较   作用   char*   string   CString   查找指定值(区分大小写)   strcmp   strncmp   strcoll   _strncoll   operator<   operator>   operator<=   operator>=   operator==   operator!=   Collate   Compare   查找指定值(不区分大小写)   _stricmp   _strnicmp   _stricoll   _strnicoll   CollateNoCase   CompareNoCase   注:返回值如果<0则前面的值小于后面的值,反之亦然   c) 替换   作用   char*   string   CString   查找指定值   _strset   _strnset   replace   replace_copy   replace_copy_if   replace_if   Replace   d) 插入   作用   char*   string   CString   查找指定值

 e) 增加   作用   char*   string   CString   动态增加值   strcat   push   append   Append   AppendChar   AppendFormat   f) 截取   作用   char*   string   CString   得到部分值   用下标操作   substr   Left   Mid   Right   Truncate   g) 移除   作用   char*   string   CString   移除部份值   remove   Remove   移除空白值   RemoveBlanks   注:此为ATL提供,非C函数   remove_if   Trim   TrimLeft   TrimRigth   h) 转换大小写   作用   char*   string   CString   转换大小写   _strlwr   _strupr   MakeLower   MakeUpper   i) 与其他类型转换   作用   char*   string   CString   转化为数字   atoi   atod   atof   Format   转化为char*   c_str   GetBuffer   GetBufferSetLength   j) 格式化   作用   char*   string   CString   格式化   sprintf   Format   k) 得到长度   作用   char*   string   CString   得到长度   strlen   length   GetLength   得到大小   size   GetAllocLength   l) 判断为空   作用   char*   string   CString   判断是否为空   判断是否==NULL或者第一个字符是否是’\0’   empty   IsEmpty   m) 重定义大小   作用   char*   string   CString   重定义大小   realloc   new   resize   GetBufferSetLength   n) 释放资源   作用   char*   string   CString   释放   free   delete (delete[])   ReleaseBuffer   ReleaseBufferSetLength   (五) 安全性   CString > string > char*;   (六) 灵活性   CString > string >char*;   (七) 可移植性   char* = string > CString     insert   Insert

方法一: CString m_str(_T(“qwerg”)); char *chr=new char[m_str.GetLength()+1]; WideCharToMultiByte(CP_ACP,0,m_str.GetBuffer(),-1,chr,m_str.GetLength()+1,NULL,NULL); string str=chr; cout<<str; 方法二 CString str = _T(“ooqoqoq”); setlocale(LC_ALL, “chs”); char *p = new char[str.GetLength()+1]; wcstombs(p,str,str.GetLength()+1); string m_fileName = p; cout<<m_fileName;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194244.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月13日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
string、string.h和ctring学习小结
string 和 string.h (和cstring等价)头文件的区别 为什么下面这段代码  #include <string.h>  void main()  {      string aaa
阳光岛主
2019/02/19
1.1K0
头文件cstring、string、string.h的区别「建议收藏」
<string>是C++标准库头文件,使用stirng类型必须首先包含string头文件,用于字符串操作,string类型可以进行+、 =、 +=、 >等运算。std::string 类实际上是 STL 模板类 std::basic_string 的具体化。
全栈程序员站长
2022/10/03
3.1K0
C/C++字符串函数
strlen()函数是求字符串长度的函数,其头文件为#include<string.h>,如果是C++11以上的版本可以只包含#include<iostream>即可。主要是用于求字符数组的长度。当是字符串string类时,可以用字符串名.size()实现。
摆烂小白敲代码
2024/09/23
1520
C/C++字符串函数
C++ 字符串操作函数
由于字符串使用广泛,C和C++提供了一些字符串函数,包括字符串连接函数strcat,字符串复制函数strcpy,字符串比较函数strcmp,字符串长度函数strlen,在C语言中被定义在string.h中定义。在C++中被定义在cstring和string中。
chaibubble
2019/05/26
2.7K0
C++ <cstring>字符串库函数的自定义实现
字符串处理函数包括几大类可以满足对char*字符串大部分操作,需要包括头文件<cstring>或者<string.h>。我是更喜欢用string类操作字符串的,只是我家小朋友刚开始学指针,而字符串操作是非常适合练基本功的。所以选几种操作讲讲,看它们如果不用库函数是怎么实现的:
用户7886150
2021/02/16
1.4K0
BSTR LPSTR LPWSTR CString VARIANT COleVariant variant t CC
Visual C++.NET涉及到ATL/ATL Server、MFC和托管C++等多种编程方式,不仅功能强大而且应用广泛。在编程中,我们常常会遇到ANSI、Unicode以及BSTR不同编码类 型的字符串转换操作。本文先介绍基本字符串类型,然后说明相关的类,如CComBSTR、_bstr_t、CStringT等,最后讨论它们的转换方法, 其中还包括使用最新ATL7.0的转换类和宏,如CA2CT、CA2TEX等。
全栈程序员站长
2022/09/09
1.2K0
实现String类
实现一个字符串类 字符串类原型: class String { private: char * str; // pointer to string int len; // length of string static int num_strings; // String类对象数量 static const int CINLIM = 80; // cin input limit 输入限制 }; 需要实现的功能: 实
DeROy
2020/05/11
5460
用C++简单的实现一个string类
C++笔试题之String类的实现 https://blog.csdn.net/caoshangpa/article/details/51530482
晨星成焰
2024/03/31
3141
用C++简单的实现一个string类
String头文件_string头文件的作用
<afx.h>、<afxcoll.h>都可以。//要在项目->属性->常规里设置为使用MFC(动/静).
全栈程序员站长
2022/09/30
4.7K0
C++实现一个简单的String类
使用基本的C++知识实现一个简单的String类,这个类中包含了C++常用的知识点。感觉是很有意思的一个小代码片段。
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.7K0
C++字符串流stringstream与string知识介绍与用法小结
之前总结了C++的文件输出输入流的相关知识,通过介绍底层的streambuf缓冲区,从而与stringstream流(字符串流)联系了起来,本文就对此进行简单的介绍。
全栈程序员站长
2022/06/29
5.6K0
【C++】定义自己的String类
这个实现的string类是比较简单的,C++标准模板库里面的string类的方法是非常多的,而且非常复杂。 在这里仅仅给大家演示string内部大概的实现方法
谙忆
2021/01/21
5450
【C++】定义自己的String类
C++之string相关(入门级)
C++ string类是用于字符串操作的重要工具之一。相比于C语言中以字符数组形式存储的字符串,C++的string类在功能和安全性上有了显著提升。由于string类封装了字符串的存储与操作,我们在使用时不必过多担心底层内存管理问题。这在编程中减少了潜在的内存泄漏与越界访问风险,是现代C++开发的核心之一。
用户11289931
2024/10/10
1210
c语言头文件cstring,头文件 <string.h> <cstring> <string> 区别
* This is a Standard C++ Library file. You should @c \#include this file
全栈程序员站长
2022/10/01
3.6K0
C++【string类,模拟实现string类】
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际 只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
逆向-落叶
2024/11/10
1780
C++【string类,模拟实现string类】
今天你学C++了吗?——string(下)
结合我们的使用,我们可以发现string事实上就是一个字符串,但是里面添加了统计容量和字节大小的两个成员变量~
用户11352420
2025/03/06
830
今天你学C++了吗?——string(下)
【C++】模拟实现string类
https://blog.csdn.net/weixin_72357342/article/details/136852268?spm=1001.2014.3001.5502 而在本次项目中我们的目标是模拟实现一个string类: 该string包含四个成员变量,分别是:
修修修也
2024/05/30
2910
【C++】模拟实现string类
《C++Primer》第三章 字符串、向量和数组
身为C++的零基础初学者,短期内把《C++Primer》啃下来是一个比较笨但是有效的方法,一方面可以掌握比较规范的C++语法(避免被项目中乱七八糟的风格带跑偏),另一方面又可以全面地了解C++语法以及C++11新标准(后续要做的事情就剩下查漏补缺,不断完善自己的知识体系)。
TOMOCAT
2020/10/28
5700
C++学习(一)——标准库类型之string全解析
本文主要讲解了C++中的string类型的基本概念和用法。包括字符串的声明和初始化方法,字符串操作,字符串的比较,字符串长度的获取,以及字符串的拼接和分割等操作。同时,也介绍了string类的构造函数和析构函数,以及string类的赋值操作符重载。最后,讲解了string类的常见面试题和实现一个string类的常见面试题。
码科智能
2018/01/03
7110
C++第九弹 -- STL之string类
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。 在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本 都使用string类,很少有人去使用C库中的字符串操作函数。
用户11317877
2024/10/16
790
C++第九弹 -- STL之string类
相关推荐
string、string.h和ctring学习小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验