`

Ansistring转换

 
阅读更多
Ansistring 转 char

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "哈哈";
    char *chr = Test.c_str();
}
  


char转Ansistring

代码:

#include
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString str = "Sample";
    char chr[MAX_PATH];
    strcpy( chr , str.c_str() );
}


Bool转AnsiString

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test=BoolToStr(CheckBox1->Checked);
}


Ansistring转bool

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{ AnsiString Test="-1"
    CheckBox1->Checked= StrToBool( Test );
}



int转ansistring

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int i = 123;
    AnsiString str = IntToStr( i );
}


AnsiString转double

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "123";
    long double d = StrToFloat( Test );
}


double转AnsiString

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double d = 123.456;
    AnsiString str = FloatToStr( d );
}



double转AnsiString并四舍五入


代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    long double d = 123.456121212;
    AnsiString str = FloatToStrF( d , ffFixed ,5 , 4 );
//说明FloatTostrF里5代表从第几个数字的后一位开始四舍五入,4代表取4位小数。
//执行后得到str是123.4600。:roll:
   
}



double转AnsiString使用类似vb的format函数


代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double d = 123.456;
    AnsiString str = FormatFloat( "000000.00" , d );
}
//得到 000123.45,当然你可以使用"# . , ; E+ E- xx"等符号,你自己试试


AnsiString转Tclor型

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "0x00FF8080";
    TColor Col = StringToColor( Test );
}


Tclor转AnsiString

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TColor Col = 0x00FF8080;
    AnsiString str = ColorToString( Col );
}


消除AnsiString 中的一部分字符串

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    int First = 3;     // 消除制定开头
    int Length = 2;    // 消除制定长度
    AnsiString Dstr = Test.Delete( First , Length );
}//得到ABEF


在AnsiString 中插入字符串

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    AnsiString Ins = "12345";     // 插入串
    int Pos = 3;                  // 在哪插
    AnsiString Istr = Test.Insert( Ins , Pos );
//得到AB12345CDEF
}


取得ansi某一位字符

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    AnsiString Npos = Test[3];//得到C
}


取得AnsiString里最后一个字符

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    char *Lstr = Test.AnsiLastChar();//得到F
}


取出AnsiString字符,这个类似vb的mid函数!

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    int First = 3;     // 3开始取
    int Length = 2;    // 取2位
    AnsiString Getstr = Test.SubString( First , Length );
//得到CD
}


AnsiString的字母比较

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    AnsiString Sample = "abcdef";
    int Result = Test.AnsiCompare( Sample );
返回1,不同!分大小写。
}




代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    AnsiString Sample = "abcdef";
    int Result = Test.AnsiCompareIC( Sample );
//返回0,相同!没有分大小写,哈哈
}


在AnsiString中寻找字符

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    AnsiString Sample = "E";
    int Result = Test.Pos( Sample );
//返回5,如果你写Sample="haha",就返回0,找不到,哈哈
}


在AnsiString中找字符串,和上一个类似

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCDEF";
    AnsiString Sample = "EF";
    int Result = Test.Pos( Sample );
//返回5,即E字符的位置
}


判断字符串长度,类似vb的len

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "拿金币来";
    int Len = Test.Length();
//返回8
}


取得字符串,类似vb的left


代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "小苹果然看了这篇文章";
    AnsiString SLstr = Test.SetLength(6);
}//得到“小苹果”


检测双字节字串

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString ChkStr = "你好";
int ChkPos =  1  ;
if ( ByteType( ChkStr , ChkPos ) == mbSingleByte ){
    Edit1->Text="0";
    }
    else{
    Edit1->Text="1";
    }//返回1,如果你写ChkStr="fxxk",就返回0
}


检测空字符串

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "";
    bool chk = Test.IsEmpty();
    if (chk )
    Edit1->Text="1";//返回1
}


全部变小写vs全部变大写

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCdef";
    AnsiString Lstr = Test.LowerCase();
}



代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "ABCdef";
    AnsiString Ustr = Test.UpperCase();
}


类似vb中Trim 的去空格函数

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "     ABCDEF      ";
    AnsiString TLstr = Test.TrimLeft();
   AnsiString TRstr = Test.TrimRight();
  AnsiString Tstr = Test.Trim();
}


但是,这个处理不了全角的空格

代码:

AnsiString __fastcall TForm1::TrimStr( AnsiString Tm , AnsiString LR )
{
    // LR … L:左除去   R:右除去   B:dou除去
    int len;
    // 左除去
    if ( LR == "L" || LR == "B" ){
        len = Tm.Length();
        while ( Tm.SubString(1,1) == " " || Tm.SubString(1,2) == " "){
            // 半角除去
            if ( Tm.SubString(1,1) == " " ){
                Tm = Tm.SubString(2,len);
                len = Tm.Length();
            }
            // 全角除去
            else if ( Tm.SubString(1,2) == " " ){
                Tm = Tm.SubString(3,len);
                len = Tm.Length();
            }
        }
    }
    // 右除去
    if ( LR == "R" || LR == "B" ){
        len = Tm.Length();
        while ( Tm.SubString(len,1) == " " || Tm.SubString(len-1,2) == " " ){
            // 半角除去
            if ( Tm.SubString(len,1) == " " ){
                len = Tm.Length();
                Tm = Tm.SubString(1,len-1);
                len = Tm.Length();
            }
            // 全角除去
            else if ( Tm.SubString(len-1,2) == " " ){
                len = Tm.Length();
                Tm = Tm.SubString(1,len-2);
                len = Tm.Length();
            }
        }
    }
    return Tm;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "  拳脚  ";
    AnsiString Ret = TrimStr(Test,"B")
}



相同字符重复输入


代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Soc = AnsiString::StringOfChar( '*' , 100 );
   Edit1->Text=Soc ;//显示100个*

}


字符串替换

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Str = "Borland C++ Builder is free"; 
    AnsiString From = "C++ Builder";                     
    AnsiString To = "Delphi";                             
    AnsiString Result;                                     
    Result = StringReplace( Str, From, To, TReplaceFlags() <<
rfReplaceAll << rfIgnoreCase );
//<<后是参数,得到Borland Delphi is free
}


全角变半角

代码:

    AnsiString Zen = "1234567890";
    int Len = Zen.Length();
    char buf[MAX_PATH];
    ZeroMemory( buf, sizeof( buf ) );
    LCMapString( GetUserDefaultLCID(), LCMAP_HALFWIDTH, Zen.c_str(), Len, buf, sizeof( buf ) );
    AnsiString Han = AnsiString( buf );
    Edit1->Text=Han;

半角变全角

代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Han = "1234567890";
    int Len = Han.Length();
    char buf[MAX_PATH];
    ZeroMemory( buf, sizeof( buf ) );
    LCMapString( GetUserDefaultLCID(), LCMAP_FULLWIDTH, Han.c_str(), Len, buf, sizeof( buf ) );
    AnsiString Zen = AnsiString( buf );
}
AnsiString重载了“[]”运算符,可以将内容当做字符数组一样操作,不过和char[]不同的是AnsiString的[]运算符的下标是从1开始的,和Delphi的String 兼容。对于长度不大的AnsiString可以直接使用[]来操作,长度大的时候最好转换成char*在使用,因为重载是通过成员函数实现的,增加了系统的调用开销。
如:


代码:
AnsiString  Temp = "这是一个测试的AnsiString";
int Length = Temp.Length();
for(int i = 1; i <= Length;i++)
{
    if(Temp[i] > 128)
    {
         //........
         //筛选其中的汉字;
         i++;
    }
    else
    {
         //......非汉字的字符。
    }
}
对于长度小的AnsiString不必要使用c_str()转换成C的字符串来操作。

AnsiString的构造函数有一下几种:

代码:
__fastcall AnsiString();
__fastcall AnsiString(const char* src);
__fastcall AnsiString(const AnsiString& src);
__fastcall AnsiString(const char* src, unsigned char len);
__fastcall AnsiString(const wchar_t* src);
__fastcall AnsiString(int src);
__fastcall AnsiString(double src);

__fastcall AnsiString(char src);
__fastcall AnsiString(short);
__fastcall AnsiString(unsigned short);
__fastcall AnsiString(unsigned int);
__fastcall AnsiString(long);
__fastcall AnsiString(unsigned long);
__fastcall AnsiString(__int64);
__fastcall AnsiString(unsigned __int64);
__fastcall AnsiString(const WideString &src);

第一个是缺省构造函数,就是生命一个AnsiString的时候使用的,比如

代码:
AnsiString Str1;
第二个是将字符串常量或者字符数组或者字符指针转换成AnsiString的构造函数,他是根据C字符串的规则进行构造,即以第一个遇到的'/0'字符作为结束字符的。常见的应用是
代码:
AnsiString Str2 = "TestString";
第三个是标准的拷贝构造函数,当执行一个赋值操作的时候实际上就是使用了这个构造函数。
第四个是指定了长度和源的构造函数,他和第二个不同的是,不是以'/0'字符作为结束字符的,而是按照指定的长度为准,这个构造函数可以突破C语言中字符串的限制和不足,可能在实际中更具使用价值,大多数的API返回的都是char*,但并不一定都是可视的字符,也可能包含了'/0',就可以使用这个构造函数来实现对内容的拷贝,尽管第二个参数是unisgned char类型,但是实际中使用好像可以突破256的限制,在一定意义上将这个构造函数可以是我们在使用BCB的时候避免使用new来分配char类型的数组数据,在一个局部的应用中,使用AnsiString保存临时的char数组数据,不需要考虑在什么异常的情况下需要释放内存,因为超出作用域的时候,AnsiString是可以自己释放的。

第五个构造函数可以是的AnsiString可以直接和wchar_t*进行转换,就是可以直接将w_chart*使用=赋值给AnsiString类型。

第六个是将整型转换为字符串的构造函数,也就是可以直接将一个int类型的值赋给AnsiString,其结果和通过IntToStr赋值一样的。
如:
代码:
int Temp = 46573284;
AnsiString Str3 = IntToStr(Temp); 和
AnsiString Str4 = Temp;
结果是一样的。

第七个至第十五个和第六个类似,作用也相当。

第十六个是将Windows的WideString转换为AnsiString的构造函数,也就是可以直接将WideString赋值给AnsiString,而不需要使用其他的方法或者API进行转换,功能和AnsiString(wchar_t*)类似。

String和string是不同的,string是标准从c++支持的处理字符串的类,在c++里我们经常这样使用string
代码:

cout<

但我们不能直接把String像这样使用,但String其实重载了<<这个操作符,如果要这样使用我们必须在头部加入:
#define VCL_IOSTREAM

这样我们可以这样了:
代码:

String str="hello world";
cout<
同理,我们还可以这样:
代码:

String str;
cin>>str;


在使用stl的时候,我们经常需要string,但String没有提供直接转换为string的方法,但我们可以这样:
代码:

//---------------------------------------------------------------------------

#pragma hdrstop
#include
#include
#define VCL_IOSTREAM
#include

//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
int main(int argc, char* argv[])
{
  String str="hello world";
  string ss(str.c_str());

  cout<  system("pause");
  return 0;
}
分享到:
评论

相关推荐

    UTF8与ansi string转换处理(DELPHI7开发)

    delphi 开发的UTF8 ansistring转换动态库。 通过DELPHI与C++测试。 前面上传的资源未经过仔细验证,有问题,不好意思,重新修正上传

    C++Builder String,UNICODE,UTF8,ANSI互转的类.rar_c

    C++Builder String,UNICODE,UTF8,ANSI互转的类,类的互相转换

    delohi7和delphi2010字符串之间的转换

    delphi7和delphi2010直接因字符串编码方式不一样,不能直接调用,本例子是本人编写的ascii码和unico之间的转变。同时也可以解决很多delphi2010调用delphi7编写的动态库连接问题

    C++ Builder中的类型转换

    C++ Builder中的类型转换,非常实用。很全。各种类型都有实例。

    ASCII转换16进制字符

    把字符串转换成16进制,送到DEMO中显示,就像miniHEX那样自己去显示16进制。 unsigned char *HexString:ASCII字符串 函数返回AnsiString标准字符 const unsigned short HSCount:转换个数

    Delphi通过主机名获取IP

    先把WideString转换成AnsiString,然后再转换成PAnsiChar。直接使用PAnsiChar(mystring)可以编译通过,但运行不正确。思路的代码如下: var mysting:string;用 PAnsiChar(AnsiString(mysting))代替 pchar(mysting) ...

    C++与C#间的函数替换

    C++与C#间的函数替换,包括函数、变量以及其他相应的头文件转换。

    BCB开发金额大小写转换

    AnsiString dx_sz,dx_dw,str_int,str_dec,dx_str,fu; AnsiString a,b,b2,c,d; int num_int,num_dec,len_int,i,a_int,pp; //dx—str为返回字符串 dx_sz="零壹贰叁肆伍陆柒捌玖"; dx_dw="万仟佰拾亿仟佰拾万仟佰拾元";...

    UTF8文本处理动态库

    UTF8字符串与AnsiString(string)字符串转换 将AnsiString字符串保存成utf8文件; 从UTF8文件中读取(文本)内容;

    Delphi2009、Delphi2010的GBK繁体转简体函数

    Delphi2007之前的API繁简转函数在Delphi2009版本出现后不能用,原因在于之前版本的String默认为AnsiString,而Delphi2007之后的String默认为WideString,同样,PChar指针也就为PAnsiString,所以调用Windows API函数...

    C++Builder函数库

    C++Builder函数库, Date ... 将TDateTime对象转换为指定格式的字符串对象,函数原型如下:  void __fastcall DateTimeToString(AnsiString &;Result, const AnsiString Format,System: :TDateTime DateTime);

    Fastreport中文话

    procedure TfrxResources.AddXML(const Str: AnsiString); var Stream: TStringStream; begin {$IFDEF Delphi12} Stream := TStringStream.Create( UTF8Encode(String(Str))); {$ELSE} Stream := TStringStream...

    从 C++ Builder 6 到 XE2 的升级问题汇总

    从 C++ Builder 6 到 XE2 的升级问题汇总:在cb6中,因为没有Unicode的支持,String、string和AnsiString几乎没有区别,甚至系统会自动将两者进行转换,因此代码中存在三者混用的情况。

    四则混合运算表达式,递归函数

    我们首先将表达式转换为小写,然后删除空格和统一左右括号。接着,我们处理圆整函数,并使用递归函数来计算表达式。 使用递归函数可以实现四则混合运算表达式的计算,但需要正确地处理运算符的优先级、左右括号和...

    crosspascal:CrossPascal 旨在成为一个兼容 Delphi 7 的跨平台源到源编译器,可生成中间 C 代码

    跨帕斯卡抽象的CrossPascal旨在成为一个与 Delphi 7 兼容的跨平台(连同来自 XE3 的新 unicode 字符串类型,但 ansistring 仍然是默认的字符串类型,以便仍然与 Delphi 7 兼容)生成中间 C 代码。 由于 C 编译器几乎...

    【升级】易语言文件解锁(关闭句柄法)-易语言

    ' AnsiString ' 指针ANSI字符串缓冲区由RtlUnicodeStringToAnsiString以前分配的。 RtlFreeAnsiString (ansi) str = “无法获取”' 无效的怎么获取…… 返回 (str) 这一次呢更新了一个RemoteCloseHandle ,大概...

    vc++ 应用源码包_1

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    vc++ 应用源码包_2

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    vc++ 应用源码包_6

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    vc++ 应用源码包_5

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

Global site tag (gtag.js) - Google Analytics