Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373045
  • 博文数量: 57
  • 博客积分: 4020
  • 博客等级: 上校
  • 技术积分: 647
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-17 15:57
文章分类

全部博文(57)

文章存档

2009年(22)

2008年(35)

我的朋友

分类: C/C++

2008-10-29 16:51:36

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本身就是针对方便字符串设计的。
例如:
//==========yuexingtian-->begin================
//string解决C-串相同的问题
//复制、比较、连接……
//--------------------------- 
#include
#include 
#include
using namespace std;
//---------------------------
int main()
{
	string a,s1="yuexingtian.";
	string s2="cublog.cn";
	a=s1;//复制
	cout<"" : "not ")<<"equal\n";//比较
	cout<//连接
	reverse(a.begin(),a.end());//倒置串 
	cout<0,3,4,'x')<//设置
	//解释s1.replace(0,3,4,'x')中0、3、4和'x'的意义
	//0代表从yuexingtian.的第一个字符开始替换,
	//3代表替换yuexingtian.中的三个字符
	//4和'x'代表用4个'x'去替换前两个数字设定要更改的位置
	//你可以用其他的数字去替换她们就会发现其中的原理 
	cout<<(s1.find("xing")!=-1 ? "" : "not ")<<"found\n";//查找串
	cout<<(s1.find('x')!=-1 ? "" : "not ")<<"found\n";//查找字符 
}
//=========end===【http://yuexingtian.cublog.cn】===thanks======== 

运行结果:
 
   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”空间脱钩,导致内存泄露
 
2008-10-19

tianyuexing
阅读(2239) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~