C string 与C++ string区别:
1)
在C语言中,将字符串作为字符数组来处理。即C string就是 char arrary[MAX_SIZE];字符数组。
而C++中的string 是 string class, 声明形式 string strObject.变量是个对象。只是他是C++ 标准库提供的string类,
其实现效果跟用户自定义的类一样。
2) C string 字符串可以用字符串数组 char Array[MAX_SIZE];与字符串变量 char *p; 两种方式来存储。
以 '\0'为字符串结束标志。
strlen 是把串结束符 '\0'算在内的,而sizeof是在对字符数组和字符变量的操作结果不一样,引起原理不一样。
strcmp, strncmp,连接使用strcat, 不能 str1+str2, strncat
strcpy, stncpy; strchr(str1, ch); 在str1中查ch第一次出现的位置,返回指针变量
而C++ string是类,是对象.结束符是npos,或者-1;而这个判断多是在使用 c++ string的成员函数时使用
不用指定字符数目的大小。
+ 取代了strcat
length和size取代了strlen
append, compare, substr,find, find_firt_of等函数
可以直接=, 而不用strncpy。
insert, replace, at, erase, clear, swap还有iterator函数的实现。
3)在函数实现部分
printf,scanf, fprinf等可以format的一个字符串中使用 "%s"时,只能用c string;如果是C++ string的话,就必须先变成c string,否则就会报错。如:
a)
string str ("Test string");
printf("%s\n", str);
编译错误:warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will abort at runtime
执行错误:Illegal instruction(coredump)
b)
void strprint(const char *s)
{
printf("function: %s\n%", s);
}
string str ("Test string");
strprint(str);
编译错误:error: cannot convert 'std::string' to 'const char*' for argument '1' to 'void strprint(const char*)'
因为c string是基本类型:char 或char array;而c++ string却是个类,是个对象。二者的实现截然不同,不同场合的使用需要转换。
修改:只需要将a), b)中的str变为 str.c_str()即可。
对了这个C++ string的c_str()函数能给出c string 和C++ string的部分区别的解释。
4.头文件
只有在使用c string的strncpy, strtok等库函数时才include <string.h>
而C++中,则在声明 string 对象时include <string>
*******************************************************************************
> ./hi
c++string类型
the string is not empty
The size of str is 11 characters.
The size of str is 11 characters.
Test string
function: Test string
linux51-dev02verse-in:/devserv1/zhili/Common
> cat Empty.C
#include <string>
#include <iostream>
using namespace std;
void strprint(const char *s)
{
printf("function: %s\n%", s);
}
int main()
{
string lstr=" ";
pty())
{
printf("the string is empty\n");
}
else
printf("the string is not empty\n");
string str ("Test s
tring");
cout << "The size of str is " << str.size() << " characters.\n";
cout << "The size of str is " << str.length() << " characters.\n";
printf("%s\n", str.c_str());
strprint(str.c_str());
return 0;
}
看到这儿,你就该明白了,c string其实就是char型的数组。
如果要使用string 对象也行
void strprint2(string& str)
{
cout<<"C++ string"<<str<<endl;
}
那么在main函数调用: strprint2(str);
用string 类型做函数形参,与用自定义类或者结构体做形参一样。
II)相同点:
C++ string 对象可以像C string的字符串数组一样操作,而且结束符同样是\0.
main(){
string str ("Test string");
int i=0;
for (; str[i] !='\0'; i++)
printf("%c", str[i]);
printf("\n");
}
>output result is
Test string
有上面的代码可以知道,原来C++ string 也可以像char Array一样被操作。由此可以猜测,
C++ string类是对C char 数组的属性及方法的封装的类。实质是一样的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。