C++数据类型——C-串与string
Author:yuexingtian
Date: 2008-10-29 Wednesday
1. 下面的例子不是c++标准,会在不同编译器上运行出不同的结果,
可以用c++标准string解决,避免因为编译器不同而结果不同。
//=========yuexingtian-->begin============
//C-串的错误比较方式
//========================================
#include
using namespace std;
//-----------------------
int main()
{
cout<<("yuexingtian"=="yuexingtian" ? "" : "not ")<<"equal\n";
char *str1="CLEANER";
char *str2="CLEANER";
cout<//显示CLEANER,因为str1是字符指针变量
cout<<*str1<//显示C,因为str2是字符指针变量的间接引用
cout<<(str1==str2 ? "" : "not ")<<"equal\n";
char a[12]="yuechaotian";//元素个数要比字符数多1,否则错误,
char b[12]="yuechaotian";//因为要靠ASCⅡ码的0做结束字符
cout<<(a==b ? "" : "not ")<<"equal\n";
}
//My Blog:【http://yuexingtian.cublog.cn】
//=================end=====================
|
2.C-串的复制问题:
char *str1="yuexingtian";
char *str2=str1; //意味着str1与str2共享“yuexingtian”空间
数组是不允许复制的:
char a1[12]="yuexingtian";
char a2[12]=a1; // 错:数组是不能复制的
//============yuexintian-->begin==============
//C库函数设计的一系列C-串库函数
//C-串操作
//C-串的赋值、复制、修改、比较、连接等问题
//------------------------------
#include
#include
using namespace std;
//------------------------------
int main()
{
char *s1="yuexingtian.";
char *s2="cublog.cn";
char a[20];
strcpy(a,s1);//复制
cout<<(strcmp(a,s1)==0 ? "" :"not ")<<"equal\n";//比较
cout<//连接
cout<//倒置
cout<'x')<//设置
cout<<(strstr(s1,"xing") ? "" : "not ")<<"found\n";//查找串
cout<<(strchr(s1,'x') ? "" : "not ")<<"found\n";//查找字符
}
//===================end======================
|
运行结果:
3.string
string是一种自定义的类型,他可以方便的执行c-串所不能直接执行的一切操作。
她处理空间占用问题是自动的,需要多少,用多少,不像字符指针那样,担心指针
脱钩时的空间游离。他可以从c-串转换得到还可以从内部“提炼”出c-串……
string本身就是针对方便字符串设计的。
例如:
运行结果:
string还有其他的操作,如各种搜索操作、插入操作、取长度、删除字符、删除字串、判断空串等,
她与C-串具有很好的亲和性,C-串可以直接赋值给创建中的和已经存在的string变量。string长度可伸缩,
比字符数组灵活的得多。由于字符指针所指向的空间实在受人为操作的控制。例如:
char *str1;
char *str2=new char[5];
strcpy(str2,"xing");
strcpy(str1,str2); // 错:str1没有空间可以储存
strcpy(str2,"yxing"); // 错:str2空间不够
str2="yxing"; // 原来的“xing”空间脱钩,导致内存泄露
阅读(2273) | 评论(0) | 转发(0) |