变量定义的问题(30分)

  • 主题发起人 主题发起人 sun2000
  • 开始时间 开始时间
S

sun2000

Unregistered / Unconfirmed
GUEST, unregistred user!
请看如下的定义:
AnsiString S = "Parent , wife", TokenStr = ',';
AnsiString Temp2 = S;
strtok(S.c_str(), TokenStr.c_str());
Edit1->Text = Temp2;
运行后:
S = "Parent ";
// 正常
Temp2 = "Parent ";
//不正常?????
我认为因该是 Temp2 = "Parent , wife";
??????
 
请看另外的定义:
AnsiString S = "Parent , wife", TokenStr = ',';

AnsiString Temp2 = S;
S += "1";
strtok(S.c_str(), TokenStr.c_str());

Edit1->Text = Temp2;
运行后:
Temp2 就不会跟随S变了,这种定义与上面的第一种定义有什么不同?
 
呵呵, 我的拿手好戏呦!
在C++中
AnsiString和CString类一样,在做复制拷贝的时候两个实例共享一个字符串缓冲区
如果后来某个字符串需要改变的话,就会另外分配缓冲区
这里有个前提,就是对字符串缓冲区的改变必须通过AnsiString的成员方法
进行,否则不会自动另行分配缓冲区,除非是用GetBuffer,然后ReleaseBuffer
在第一个程序之中,由于用了强制类型转换,strtok把缓冲区改变了但是两个实
例自己都不知道
第二个程序中,S += “1”;调用了AnsiString的 + 操作符,就会另外给S
申请缓冲区,从而和Temp2分离了
 
pegasus你好:
如果在程序中不想出现第一种情况的话有什么办法避免吗?
即Temp2仅需要S的值,而不想共分配缓冲区.
谢谢!!!
 
pegasus你好:
希望你介绍点编程提高的方法
谢谢!!!!
 
你好!
我没有找到AnsiString的定义,不知道这个类有哪些方法可用,
我用CString类的例子来说明一下:
如果是需要用到字符串的缓冲区,CString类中提供了两种转换函数,
一种是隐式转换,转换成为const char *, 另一种是显式的用成员
函数转换:GetBuffer, GetBufferSetLength. 隐式转换可以用于不
需要改变缓冲区内容的场合,这样CString不需要管理字符串缓冲区
的再分配问题。显式转换之后,CString就根据原先的缓冲区有没有
和别的实例共用(靠缓冲区中的引用计数来标记)决定是否需要另外
分配新的缓冲区
假设S和TokenStr是CString类的对象,那么第一个程序可以这样写
// strtok的原型是:char * strtok(char *, const char *);
strtok(S.GetBuffer(), TokenStr);
//第一个用了显式转换,第二个用了隐式转换
S.ReleaseBuffer();
在你的程序中似乎用的是STL中的字符串类型,那么就这样:
AnsiString S = "Parent , wife", TokenStr = ',';

AnsiString Temp2;
Temp2.append(S);
// 下同
不过像这样把c_str返回的const char *强行传给确实会改变字符串缓冲区的
strtok(char *, const char *)的第一个参数, 很可能就会出问题(当然在
你的例子里面不会引起严重的问题)


 
关于提高编程水平:
1。从小的角度来讲,是提高编程技巧,可以通过阅读C/C++的标准类库源程序
来提高。还可以看看像Prolog这样的语言,换一个角度思考问题。(其实程序
设计语言提供了或者同时也限定了使用者的思考方法)
2。要提高算法设计的技巧,可以找数据结构和算法设计的书看看
3。要把程序的结构设计好,要设计好的软件系统,可以看看软件工程的书,
并要实际分析别的系统的体系结构,多接触大型的实用系统
经验值就是这样提高的。。。
 
pegasus大虾 你好,谢谢你的帮助,本网站多亏有你这样热心,有水平的人,多多向你学习!!
请你推荐一本算法设计的书,谢谢!!!
 
pegasus大虾 由来麻烦你:
1->GetBuffer()是什么函数,我在delphi,builder 中都没有找到??
2->append()好像不是AnsiString的成员函数 ??
谢谢!!!
 
最有名的计算机程序设计的书应该是D. Knuth的&lt&ltThe Art of Computer Programming&gt&gt,
中文译本是&lt&lt计算机程序设计技巧&gt&gt,不过此书乃宏篇巨著,而且现在
很难买到,你可以到大学的图书馆借到
关于算法的书南京大学出版社曾经出过一本很好的书,&lt&lt现代计算机常用数据结构与算法&gt&gt, 是翻译的外国著作,
可惜没有提供原书名称.
电子工业出版社的一套“计算机学科教学计划95(?)“中的那本&lt&lt算法与数据结构&gt&gt也不错
复旦大学出版社很久以前出的一本书(我上中学的时候就见到了,估计出版了10年或者更早了吧!),书名叫做&lt&lt计算机算法--设计和分析引论&gt&gt,是一本译著,也不错
要是找不到上述三本书,那么就看看清华大学出的数据结构教材吧!或者看清华
的影印版教材中的&lt&lt数据结构--用C++语言描述&gt&gt也行
 

Similar threads

后退
顶部