以前一直分不清string类 string.h头文件 cstring头文件的去别,今天ce了一发才稍微弄懂了。
首先C语言中只有string.h头文件,string.h包含了一些字符数组和字符串的函数(其中包括字符串连接:strcat()、复制:strcpy()、比较:strcmp()以及测长度:strlen()等函数),在C语言中只能用数组来存放字符串(注意:字符串结尾\0结束,而字符数组最后一个字符不一定是\0)。
cstring:我们知道C++为了兼容C,将C的.h头文件换成了c开头的,所以string.h自然就换为了cstring。即cstring是string.h的升级版本
string:由于在C++中为了防止C存字符串只能用数组,而一旦字符串长度超过数组大小,就可能引发错误的现象,C++使用了更加方便安全的方法。C++提供了的一种新数据类型--字符串类型(string类),他不是c++的基本数据类型(int、double、char等基本数据类型),而是在C++标准库中申明的一个字符串类,用这种类可以定义对象,每一个字符串变量都是string类的一个对象。所以使用string类型来定义变量时应该引入string类头文件。
总结:用C++写代码时只需引入cstring函数头文件和string类头文件即可。
试验代码:
//@auther Yang Zongjun
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <cmath>
#include <cstring>
#include <string>
using namespace std;
#define PI acos(-1.0)
#define EPS 1e-8
const int MAXN = 115;
const int INF = 2100000000;
char c[MAXN], ch;
string s, a;
int main()
{
//freopen("C:/Users/Administrator/Desktop/input.txt", "r", stdin);
cin >> c;
cout << c << endl;
cout << strlen(c) << endl;
cout<< c[17] <<endl;
cout << endl;
cin >> s;
cout << s << endl;
//cout << strlen(s) << endl;
cout<< s.length() << s.size() << endl;
cout<< s[17] <<endl;
cout << endl;
getchar();
getline(cin, s);
cout << s << endl;
//cout << strlen(s) << endl;
cout<< s.length() << s.size() << endl;
cout<< s[17] <<endl;
gets(c);
puts(c);
cout << c << endl;
cout << strlen(c) << endl;
cout<< c[17] <<endl;
cout << endl;
return 0;
}
//测试数据
/*
nehwrigj28934yehgn
nehwrigj28934yehgn
nehwrigj28934yehgn 438s
nehwrigj28934yehgn 438ssdfs
*/
ps:1.读取一行时的两种方法:gets()--> 字符数组和getline()--> string类型的字符串函数
2.测长度: 字符数组应用strlen(c),字符串可以用s.length() || s.size()
char c[MAXN];
string s;
gets(c);
cout << c << "----->" << strlen(c) << endl;
getline(cin, s);
cout << s << "----->" << s.length() << " " << s.size() << endl;
亦可参考此处:http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html