请C++高手们帮忙解答:关于使用string时可不可以用头文件#include<string.h>的问题 谢谢!

在程序中使用了string类来处理字符串,那么在声明头文件时我写了#include<iostream.h>和#include<string.h>,结果编译时出错了。当我改写成#include<iostream>和#include<string>,再加上using namespace std;再编译时就没有错误了。请问这是为什么呢?这两者写法有什么区别吗?
谢谢!

第1个回答  2013-11-20
#include <iostream> 和 #include <iostream.h> 包含的东西有哪些不同?

之前在写C++程序的时候只知道使用 #include <iostream> 的时候,使用函数前要用 using namespace std; 导入命名空间,而 #include <iostream.h> 则不用,这个得看C++标准化过程为C++开发者做了哪些有意义的工作。

C++标准化过程中,其中一个环节,解决了以下问题:

(1)C++增加了名称空间概念,借以将原来声明在全局空间下的标识符声明在了namespace std下。

(2)统一C++各种后缀名,如.h、.hpp、.hxx等。标准化之前的头文件就是带后缀名的文件,标准化后的头文件就是不带后缀名的文件。C++ 98 规定用户应使用新版头文件,对旧版本头文件不在进行强制规范,但大多数编译器厂商依然提供旧版本头文件,以求向下兼容。

也就是说带 .h 的头文件是旧标准的,如果想用新的标准的头文件就不要带 .h。

另外,为了和C语言兼容,C++标准化过程中,原有C语言头文件标准化后,头文件名前带个c字母,如cstdio、cstring、ctime、ctype等等。这些头文件都可以在 C:\Program Files\Microsoft Visual Studio 10.0\VC\include 这个目录下找到(以VC2010为例)。也就是说,我们如果要用C++标准化了的C语言头文件,就得作如下的转换

#include <stdio.h> --> #include <cstdio>
#include <stdlib.h> --> #include <cstdlib>
#include <string.h> --> #include <cstring>

还要提及的一点是,我在看C++标准库的时候,看到一个特殊情况 <memory.h> 和 <memory>,这两个头文件是完全不同的,因为我发现 <memory.h>头文件件包含了 <mem.h>;而 <memory> 包含 <memory.stl>

这里摘录 memory.h 中的一段代码: (以上内容来自: http://club.topsage.com/thread-2271422-1-1.html) 【酷_酷_币】为您服务...
第2个回答  2013-11-20
如果要包含非标准库头文件,语法应该是 #include "xxxxx.h"。iostream是标准输出输入头文件,用#include<iostream>即可。你这里用尖括号包含后缀为.h的头文件,当然会报错。(关于头文件的介绍,请查看你的学习资料)
第3个回答  2013-11-20
如果你编译器版本比较高的话,比如VS2008 那么是不会存在string.h这个头文件的 已经统一为string+namespace的形式了

请C++高手们帮忙解答:关于使用string时可不可以用头文件#include<string...
include <string.h> --> #include <cstring> 还要提及的一点是,我在看C++标准库的时候,看到一个特殊情况 <memory.h> 和 <memory>,这两个头文件是完全不同的,因为我发现 <memory.h>头文件件包含了 <mem.h>;而 <memory> 包含 <memory.stl> 这里摘录 memory.h 中的一段代码: (以上...

C++中string怎么用?麻烦大神给个详细的解答!
首先,为了在我们的程序中使用string类型,我们必须包含头文件 <string>。如下: #include <string> \/\/注意这里不是string.h string.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单: string Str;这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,...

C++ string在头文件中的使用
C++ string在头文件中的使用 #ifndefEXE2_H#defineEXE2_H#include<cstring>usingnamespacestd;classEquation{private:doublea,b,c;public:Equation(doublea,doubleb,doublec){}~Equation(){}boolcheck(strings);v... #ifndef EXE2_H#define EXE2_H#include <cstring>using namespace std;class Equation{privat...

你好。C语言 头文件问题 请高手们列出所有的头文件,并把里面的函数也...
include <math.h> \/\/定义数学函数 include <stdio.h> \/\/定义输入/输出函数 include <stdlib.h>\/\/定义杂项函数及内存分配函数 include <string.h>\/\/字符串处理 include <strstrea.h> \/\/基于数组的输入/输出 include <time.h> \/\/定义关于时间的函数 include <wchar.h> \/\/宽字符处理及输入/...

C++中 替换string类型字符串中汉字的问题
string s1="你好世界"; 构造了 string 类 的s1 int i;for (i=0;i<s1.size();i=i+2) { 两个字符两个两个字符地检查 s1[i]+s1[i+1] 里面是 “我”把这两个单元 换成 “你”} 我的计算机不支持中文,所以只能给你思路,无法给你完整的代码。VC++ 用 CString 类,用TCHAR, _T...

Dev C++中malloc函数被哪个头文件包含?NOIP复赛让用该头文件吗?
C++的话可以 include<cstdlib> using namespace std;...和以上方法完全等价。不过一般会用new\/delete运算符而不用麻烦的malloc\/free。但是calloc、realloc一般还是习惯用库函数。ANSI标准库函数基本上是给用的,如果不能用应该会在题目中另行说明:http:\/\/www.oibh.org\/?action-viewthread-tid-22227。另...

高手们,帮忙看下这个C++程序的错误在哪里? 我想找出矩阵中最大的数...
自己看吧,能写出来就能看得懂,这肯定没问题 include<iostream> include<iomanip> include<cmath> include<string> using namespace std;int m,n,k,p,q;void hey(int c[4][4],int *a,int *b);int main(){int c[4][4],i,j;cout<<"please enter some numbers"<<endl;for(i=0;i<...

#include<stdio.h> main() { int w,n; for (w=0,n=0;n<=10;n++) w=...
这个是解决每种物品只有一个的情况的,你可以自己改进一下 include <iostream.h> include<iomanip.h> include<string.h> int min(int w,int c){int temp;if (w<c) temp=w;else temp=c;return temp;} int max(int w,int c){ int temp;if (w>c) temp=w;else temp=c;return temp;}...

关于c++#include <iostream> using namespace std; void main() { d...
使用setprecision(n)可控制输出流显示浮点数的数字个数,setprecision(n)是格式控制符,所以要在程序中加入头文件 iomanip.h,另外最后一句输出语句setprecision(n)的用法也不太对,应该在后面指明需要格式输出的是哪个变量。修改后的程序如下:include <iostream> include <iomanip> using namespace std;void...

关于STL map容器的错误 求高手解答
class a_really_long_class_name { public:a_really_long_class_name() {};int m_data;};void main(){ a_really_long_class_name test_obj;test_obj.m_data = 12;} 类名超过了255个字,使用时就会报4786的waring.在使用STL(C++标准模板库)的时候经常引发类似的错 误,尤其是vector,map这...

相似回答