请C++高手们帮忙解答:关于使用string时可不可以用头文件#include<string.h>的问题 谢谢!
必须的。没包含头文件。编译器怎么找到这个函数的声明和定义呢??函数的声明都放在头文件里面的。不要以为编译器是神。
为什么下面这段代码
#include
void main()
{
string aaa= "abcsd d";
printf("looking for abc from abcdecd %s
",
(strcmp(aaa,"abc")) ? "Found" : "Not Found");
}
不能正确执行,说是string类型没有定义
而下面:
#include
using namespace std;
void main()
{
string aaa= "abcsd d";
printf("looking for abc from abcdecd %s
",
(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
#include
using namespace std;
或者
#include
#include
其中是与C标准库的相对应,但裹有std名字空间的版本。
之前在写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) 【酷_酷_币】为您服务...
如果要包含非标准库头文件,语法应该是 #include "xxxxx.h"。iostream是标准输出输入头文件,用#include<iostream>即可。你这里用尖括号包含后缀为.h的头文件,当然会报错。(关于头文件的介绍,请查看你的学习资料)
如果你编译器版本比较高的话,比如VS2008 那么是不会存在string.h这个头文件的 已经统一为string+namespace的形式了
这段C语言指针麻烦帮忙解释一下
char *p=s;使得p和s指向同一个位置,就是某个字符串的开头。while循环的作用是遍历字符串的每个值,看其是否为“\\0”也就是字符串的结尾,如果不是则p指向下一个位置,如果是则返回p-s的值,休息此时p指向结尾,s仍然指向开头,那么他们的差值就是字符串的长度 ...
C高手们进来吧
因为case语句没有break 也就是说:从符合条件的case语句开始,往下都执行一遍 1.i==0时,执行 case 0:printf("%d",i);case 2:printf("%d",i);default:printf("%d",i);2.i==1时,执行 default:printf("%d",i);3.i==2时,执行 case 2:printf("%d",i);default:printf("%d",i);...
谁能帮我注释一下这段程序(C)
这属于C++的范畴,虽然我C++学得也是半斤八两,但是这段代码我还是基本上过得去。我假设你是有一定的C编程基础,所以就只回答你空间描述的不懂的地方了,每句都翻译枯燥而且也会感觉不知所云。还有什么不懂的,欢迎提问,我有足够的耐性和信心让你搞明白,呵呵^!^ C++中主要是比C多了面向对象的...
高中化学问题,高手们帮忙分析一下C选项,一定要详细哦
因为乙酸是弱酸,不能够在水中完全水解,而且水解程度由浓度控制,即越弱越水解。
高手们,帮忙啊,c语言程序设计
这种算法在原理是对的,也一定可以求出满足题意的全部解。但是,按照这一思路编出的程序效率很低,在微机上几个小时也不会运行结束。这一算法致命的缺陷是:要穷举和判断的情况过多。充分利用题目中的“每一个四位数都是可逆素数”这一条件,可以放弃对矩阵中每个元素进行的穷举的算法,先求出全部的四位可逆素数(204...
C语言高手们!!i=(--a= =b++)? --a:++b;表示什么???
为假的时候执行b++;最后,看i=(--a= =b++)? --a:++b;语句,由第二步可以看出,当--a等于b++时,即(--a= =b++)为真时,该语句相当于i=--a;当--a不等于b++时,即(--a= =b++)为假时,该语句相当于i=++b;C语言程序只要一步步好好理解,应该会很简单的,加油哦~...
c语言程序设计,大学生作业,急需,老师这周四就要,高手们帮帮忙啊!
楼上的和楼上的楼上的楼上是SB。辽工大的吧。需要盘文件输入输出、数组、循环、选择、除主函数外至少要用到3个自定义函数。你这分给的也太少了吧 以下(COPY):这个就可以:咱班都看过了。。(底下都写上!!!我记得有个地方他打错了,交之前让老师帮你改一改。这个交上去是很多个老师一起...
100分悬赏!! 请问C语言程式高手一些有关於条件判断的问题!!
include <stdio.h> include <string.h> include <stdlib.h> typedef struct _student { char name[16];int sign;int val;} Student;Student* readFile(FILE* pf, size_t* cnt){ size_t n = 8, i = 0;Student* ps = (Student*)malloc(n * sizeof(Student));cnt = 0;if(ps !
高手们帮忙解决一下,谢谢
全部代码主要是实现字符串排序。Q:for (p=string; *p; p++)??这个for循环是做什么用的,能详细解释一下吗 { for (q=p; *p==*q; q++);strcpy(p+1,q );} A:个人认为这段代码是无效的,不完成任何有意义的操作。可以删除。这段代码相当于:p=string; \/\/ 或者写成p=&string[0];whil...
高手们,帮我编几个c语言的小程序!!谢谢.明天就要交!!
3.编一C程序,它能读入两个整数m与n,计算并输出m与n的绝对值的最大公约数及最小公倍数 解:源程序如下:int gys (int x,int y){ int j;j=(x<y)?x:y;for(;j>0;j--)if(x%j==0&&y%j==0)break;else continue;return (j);} int gbs (int z,int w){ int i;i=(z>w)?
江蚂海力: #include<iostream> using namespace std;main() {char s[256],t[256];cout<<"请输入字符串s:"<<endl;cin.getline(s,256);int i=0,j=0;while(s[i]){if(s[i]%2!=0){t[j]=s[i];j++;}i++;}cout<<endl;t[j]=0;j=0;while(t[j]){cout<<t[j];j++;}cout<<endl;return 0; } 希望看懂和采纳啊!
津市市18966011753: 请C++高手们帮忙解答:关于使用string时可不可以用头文件#include<string.h>的问题 谢谢! - ?
江蚂海力: #include<string.h> 是C语言的字符数组库函数,不是C++的string类 C++的string类只能用:#include<string> using namespace std; 如果C字符数组头文件要这样用,必须改为:#include <cstring> using namespace std; 原因在于C的标准出来得早,C++ 的string类是后来的
津市市18966011753: ~求教一个c语言程序~请高手们帮忙解答 (解释具体执行过程及结果) - ?
江蚂海力: &就是取地址的意思 i=0时,&s[0]就是取s...
津市市18966011753: c++题目一个,求高手解答 - ?
江蚂海力: #include#include using namespace std;int main(){ string s; char temp; int len,i,j; cout<<"请输入字符:"; cin>>s; len=sizeof(s)...
津市市18966011753: 求C++高手帮忙解答!!! - ?
江蚂海力: 1. #include <iostream> int main() {for (int i = 1; i <= 10; i++){std::cout << i << std::endl;if (i == 6)break;}return 0; } 2. #include <iostream> int main() {for (int i = 1; i <= 10; i++){std::cout << i << std::endl;if (i == 6)continue;}return 0; } 3. #...
津市市18966011753: c++ Sqrt 用函数 拜托高手们帮忙,非常感谢 - ?
江蚂海力: 这里是 C 程序,自己改 C++ 吧.#include <stdio.h>#include <stdlib.h>#include <math.h> void main ( ) { int n=1; int i; double r=0; printf("input a natural number n\n"); scanf("%d",&n); for (i=1;i<=n;i++){ r = n + sqrt(n); r = sqrt(r); } printf("%lf\n",r); }
津市市18966011753: 急求:想拜托C++高手帮我解题!!要快~~~~~ - ?
江蚂海力: #include#include class point{...
津市市18966011753: 我有一个关于c++的问题,求高手解答?
江蚂海力: a这个变量没有必要,直接用j进行判断就可以了. 修改后的代码如下,供参考,望采纳. #include<iostream> using namespace std; int f(int k) { int p=1,i; for(i=1;i<=k;i++) p*=i; return p; } int main() { int s=0,n,j; cin>>n; for(j=1;j<=n;j+=2) { if((j+1)%4==0) s+=-f(j); else s+=f(j); } cout<<s<<endl; return 0; }
津市市18966011753: c++初级问题,求高手帮忙解答!!!!?
江蚂海力: 1、下列程序有何问题?请仔细体会使用指针时应避免出现这个问题.(文件名:sy3-1.cpp) #include <iostream> using namespace std; int main() { int *p; int i; p=&i; //指定p的地址和i一样,这样就不是随机了.也就安全了. *p=9; ...
津市市18966011753: snprintf()在C++中属于一个固定的头文件吗?为什么直接用会出现找不到标识符?怎么解决?谢谢高手帮忙.. - ?
江蚂海力: snprintf()基本是在c里面用的 包含在 #include 这儿头文件里面 你没有这个头文件当然就不认识啦