BCB:AnsiString和String的区别

AnsiString和String的区别、使用

本文转自:http://www.bianceng.cn/c/index.htm

16.C/C++语言在CB中的一些特定用法

  2)AnsiString是从Delphi中引进来的吗?

  答:CB的核心组件VCL是用Object Pascal语言写出的,所以CB的VCL组件的属性有很多都是使用long string,例如:Text、 Name、Caption等属性都是使用Object Pascal的long string。基于此关系,CB只好建立了和Object Pascal的long string相应的类别,我们将它称为AnsiString。

  3)AnsiString与String有什么区别?

  答: C++ Builder在Sysdefs.h头文件中有这样的定义:

  typedef AnsiString String;

  从这一点在看他二者是完全一样的,只是书写起来后者更方便一些,前者是意图更明了一些。

  4)能介绍一下AnsiString类的一些常见函数及其用法吗?

  答:当然可以了,下面就常见函数做一下简单介绍:

    成员函数                                                     语法                                                        功能

       c_str                                   char *_fastcall c_str() const                             返回字符串数据的指针

      Delete                           void _fastcall Delete(int index,int count)              由index处开始删除count个字符

     Insert                   void _fastcall Insert(const AnsiString& str,int index)    由index处开始插入字符str到原字符串中

     IsEmpty                                   bool _fastcall IsEmpty() const                    返回字符串是否为空,true表示空字符串

       Length                                      int _fastcall Length() const                                      返回字符串长度

     LowerCase                           AnsiString _fastcall LowerCase() const                    将字符串中的大写字母改写成小写

      UpperCase                          AnsiString _fastcall UpperCase() const                     将字符串中的小写字母改写成大写

       Pos                                int _fastcall Pos(cont AnsiString& substr)const;     找出子字符串在原字符串中由第几个位置开始

     SubString                AnsiString _fastcall SubString(int index,int count)const    返回由index处向后取count个字符

      ToDouble                                       double _fastcall ToDouble() const                          将字符转成双精度数值

           ToInt                                          int _fastcall ToInt() const                                           将字符转成整形

         IntToStr                             AnsiString _fastcall IntToStr(int Value)                                将整形转成字符串

         Trim                        AnstString _fastcall Trim() const返回一个新的字符串,它会将原字符串前后空白或控制字符清除后再返回

    WideChar    wchar_t fastcall WideChar(wchart* dest,int destsize)const 转换AnsiString到一个宽字符数组(COM中常用)


 5)AnstString成员函数与传统字符串函数有何不同之处?

  答:我们可以通过二者的一个对照表来查看他们的之间的不同之处:
   
AnsiString成员函数                                         功能                                                       传统字符串函数

              =                                                 字符串拷贝                                                         strcpy

            +=                                                 字符串合并                                                         strcat

             +                                                  字符串连接                                                            无

==,!+=,<,<=,>,>=                                     字符串比较                                                       strcmp

         c_str()                                              相互转换                                               无,但可以利用指针实现

         Delete                                             删除子字符串                                                          无

        Insert                                               插入子字符串                                                          无

        Length                                             求字符串长度                                                        strlen

      LowerCase                                        字母转成小写                                                        strlwr

         Pos                                                 找出子字符串                                                        strstr

     SetLength                                          设置字符串长度                                                        无

        ToInt                                                  转成整形                                                              无

      ToDouble                                            转成双精度                                                         sprintf

      UpperCase                                         字母转成大写                                                      strupr


   6)如何实现传统字符串与AnsiString字符串的相互转换? 


  答:传统的C语言是使用字符来组成字符串的(字符串末尾必须有’/0’做为结束标志),其格式和AnsiString并不相同。由于在CB中我大量使用AnsiString格式,所以有时也难免要进行一些转换,我们可以通过下列三种方法来实现:

  方法1:AnsiString字符串转换成字符串数组:

  先利用AnsiString类别中的c_str()方法转换成传统字符串数组,再用strcpy拷贝,将它拷贝到字符数组中去:

  char s1[20];

  strcpy(s1,Edit1->Text.c_str());

  方法2:AnsiString转换成传统字符串可以利用字符指针来实现:

  可以通过字符指针来实现:

  char *s;

  s=Edit->Text.c_str();

  方法3:利用字符指针实现传统字符串转换成AnsiString:

  char *s=”试一试,看看能不能成功!”;

  Edit->Text=s;

转载于:https://www.cnblogs.com/CPYER/p/3373628.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化代码 参考 if (cstemp.combos != null && cstemp.combos.Count > 0) { List<BCD_COMBO_ITEMEntity> _ITEMEntities_Yes = new BCD_COMBO_ITEM().GetItemList( String.Format("COMBOGUID IN ({0})", String.Join(",", cstemp.combos.Select(x => "'" + x.GUID + "'").Distinct()))); if (_ITEMEntities_Yes != null && _ITEMEntities_Yes.Count > 0) { List<BCD_COMBO_ITEMEntity> _ITEMEntities_No = (cstemp.Nocombos != null && cstemp.Nocombos.Count > 0) ? new BCD_COMBO_ITEM().GetItemList( String.Format("COMBOGUID IN ({0})", String.Join(",", cstemp.combos.Select(x => "'" + x.GUID + "'").Distinct()))) : null; string _ITEMEntities_YesString = String.Join(",", _ITEMEntities_Yes.Select(x => x.ITEMGUID ).Distinct()); string _ITEMEntities_NoString = (_ITEMEntities_No != null && _ITEMEntities_No.Count > 0)? String.Join(",", _ITEMEntities_No.Select(x => x.ITEMGUID).Distinct()):""; List<BCB_CHECKSUBEntity> subTempsno = !string.IsNullOrWhiteSpace(_ITEMEntities_NoString) ? _CHECKSUBEntities.Where(x => _ITEMEntities_NoString.Contains(x.ITEMGUID)).ToList() : null; string subTempsnoString = (subTempsno != null && subTempsno.Count > 0) ? String.Join(",", subTempsno.Select(x => x.MAINGUID).Distinct()):""; List < BCB_CHECKMAINEntity > mainsTemps = _CHECKMAINEntitys.ToList().Where(r => ((cstemp.ageb > 0 || cstemp.agee > 0) ? (r.AGE >= cstemp.ageb && r.AGE <= cstemp.agee) : true) && (!string.IsNullOrWhiteSpace(subTempsnoString) ? (cstemp.bothagree == "True" ? subTempsnoString.Contains(r.GUID): !subTempsnoString.Contains(r.GUID)) : true)).ToList(); string mainguidstring = (mainsTemps != null && mainsTemps.Count > 0) ? String.Join(",", mainsTemps.Select(x => x.GUID).Distinct()) : ""; List <BCB_CHECKSUBEntity> subTemps = _CHECKSUBEntities.Where(x => !string.IsNullOrWhiteSpace(x.RESULT) && _ITEMEntities_YesString.Contains(x.ITEMGUID) && mainguidstring.Contains(x.MAINGUID)).ToList(); if (subTemps != null ) { drAuto[cstemp.CSName] = subTemps.Select(x => x.MAINGUID).Distinct().Count(); } } }
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值