关于AnsiSting的使用大全

C++ Template 基础篇(二):类模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第二部分。 类模板定义 类模板 类模板中的成员函数模板 类模板Tips 类模板中的static成员 类模板成员函数实例化 类模板别名 特化与偏特化 类模板的特化与偏特化 类模板成员特化 类模板定义类模板也是公共逻辑的抽象,通常用来作为容器(例如:vector)或者行为 阅读详情

arrow:    

Ansistring 转 char
代码:

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


char转Ansistring
代码:

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


ansistring转int
代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "123";
    int i = StrToInt( Test );
}
 

int转ansistring
代码:

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

ansisting转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"等符号,你自己试试 :wink:
 


ansi转Tclor型(从现在开始AnsiSting简称ansi
代码:

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


Tclor转ansi
代码:

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


ansi的一部分消除,哈哈,类似vb里的mid函数,不过是反的~
代码:

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


ansi的一部分插入
代码:

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
}


取得ansi里最后一个字符
代码:

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


取出ansi字符,这才是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
}


ansi的字母 是否相同比较
代码:

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,相同!没有分大小写,哈哈
}


在ansi中寻找字符
代码:

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


在ansi中找字符串,和上一个类似
代码:

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();
}
 

但是,这个处理不了全角的空格   怎么办ni~
代码:

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 );
}

细谈 C++ 类模板的分离式编译:类模板究竟要不要接口与实现分离 一、引言 只要是接触了 C++ 有一定时间的程序员,都会记住这么一个不成文的规定: 类模板的声明与实现最好放在同一个头文件中 这或许是来源于某次错误尝试的下意识的修改,又或许是简单搜索了下 C++ 类模板编译报错的原因,看到了满篇的诸如 “为什么 C++ 编译器不能支持对模板的分离式编译” 的博客,久而久之,就留下了这么一个印象。 那么实际上,如果你简单的记为 “C++ 编译器是不支持对模板的... 阅读详情

相关推荐

C++——详解类模板与友元函数

模板类的友元函数有三类: 1)非模板友元函数:友元函数不是模板函数,而是利用模板类参数生成的函数。2)约束模板友元函数:模板类实例化时,每个实例化的类对应一个友元函数。 3)非约束模板友元函数:模板类实例化时,如果实例化了n个类,也会实例化n个友元函数,每个实例化的类都拥有n个友元函数。

阿标de杂货铺 3677

C++Build学习2

C++ Builder 中的字符串类型可分大概分为ANSI字符串与Null-Terminated字符串两类; 前者是C++Builder特有的字符串类型(和Delphi中的String类型是一样的),后者是C语言中惯用的以零字符作为字符串结束的类型。 C++ Builder 中的String字符串类型又分为字符串(AnsiString)、宽字符串(WideString)。

宁静以致墨的专栏 1134

C++类模板:从泛型蓝图到惰性实例化的核心机制解析

泛型编程是现代C++的核心范式之一,它通过参数化类型实现了代码的高度复用。其基本原理是将数据类型作为参数传递,编译器在编译时根据具体类型生成特化代码,从而在保持类型安全的同时消除冗余。这一技术的核心价值在于构建通用的数据结构和算法组件,大幅提升代码的复用性和可维护性。在工程实践中,泛型被广泛应用于容器库、智能指针、算法库等场景,例如STL中的vector、map等容器都是泛型设计的典范。类模板作为泛型编程的高级形态,其成员函数的惰性实例化机制尤为关键——编译器仅在函数被实际调用时才生成具体代码,这避免了不必

weixin_33884611的博客 680

AnsiString用法

C++Builder 6.0 AnsiString 用法,实例

码城的博客 7221

C++类模板本质:编译期类型工厂与实例化机制解析

C++泛型编程的核心在于类模板——它并非语法糖或高级宏,而是编译期运行的类型构造器。其原理基于延迟实例化、依赖名称查找(ADL)和SFINAE等机制,在编译阶段为每个具体类型生成独立、零开销的特化代码。这种机制赋予C++强类型安全、内存布局可控、无运行时开销的技术价值,广泛应用于嵌入式系统、高频交易、传感器融合等对性能与确定性要求严苛的工程场景。深入理解类模板的声明-定义-实例化三阶段分离,是突破模板误用、编译错误频发与二进制膨胀等实战瓶颈的关键路径。

cuankuangzhong6373的博客 486

C++模板编程:函数模板与类模板深度解析

在C++编程中,我们经常遇到需要为不同类型实现相同逻辑的情况。传统方法是使用函数重载,但这会导致大量重复代码。C++模板应运而生,它实现了"泛型编程"(Generic Programming)的理念,允许我们编写与类型无关的代码。本文将深入探讨C++中的函数模板和类模板,揭示其工作原理、使用技巧和最佳实践。

vvilkin的学习备忘 1067

C++ Builder 初学问与答(十六)

16.C/C++语言在CB中的一些特定用法       2)AnsiString是从Delphi中引进来的吗?   答:CB的核心组件VCL是用Object Pascal语言写出的,所以CB的VCL组件的属性有很多都是使用long string,例如:Text、 Name、Caption等属性都是使用Object Pascal的long string。基于此关系,CB只好建立了和Obje

.NET快速开发框架 1631

[C++ Template]深入模板--实例化

目录 第10章 实例化 10.1 On-Demand实例化 10.2 延迟实例化 10.3 C++的实例化模型 10.3.1 两阶段查找 10.3.2 POI 10.3.5 例子 10.5 显式实例化 第10章 实例化 模板实例化是一个过程, 它根据泛型的模板定义, 生成(具体的) 类型或者函数。 在C++中, 模板实例化是一个很基础的概念, 但却多少有一些错缩复杂。 复杂性的...

u012481976的博客 1407

AnsiString类

        介绍AnsiString类之前,先要介绍一些背景知识。VCL大量利用Pascal长字串数据类型,几乎所有基于文本的VCL属性都采用Pascal长字串。例如,Text、Name和Caption属性都是Pascal长字串属性。VCL的许多构件方法和事件处理函数也采用Pascal长字串。关于Pascal长字串数据类型要注意两点。第一,Pascal长字串是真正的语言数据类型,而不象C/C+

0011411的专栏 1384

C++ 类模板

目录 1、定义 2、验证类模板生成的类定义 3、非类型参数 4、模板别名 5、模板类 6、多个参数类型 7、类型参数默认值 8、模板类作为模板函数的入参 9、模板具体化 10、成员模板 11、将模板类用作类型参数 12、模板类中的友元 1、定义 类模板的概念用法同之前讲解过的函数模板是基本一致的,类模板不是一个完整的可以被单独编译的类定义,只是...

菜鸟进阶之路 895

C++ STL二(类模板)

类模板

weixin_43155199的博客 489

AnsiString

AnsiString类是BCB中最常见类之一,了解它对以后深入学习BCB大有帮助。 介绍AnsiString类之前,先要介绍一些背景知识。VCL(Visual Component Library 可视化组件库)大量利用Pascal长字串数据类型,几乎所有基于文本的VCL属性都采用Pascal长字串。例如,Text、Name和Caption属性都是Pascal长字串属性。VC...

weixin_34402408的博客 366

【一天一篇CPP】类模板

1.有时对类而言,两个或多个类,其功能是相同的,仅仅是数据类型不同。 请看下面两个类: class Compare_int{ public: Compare_int( int a, int b) {x = a; y = b;} int max(){return (x>y)? x : y;} int min(){return (x<y)? x : y;} private: int

c熊 848

类模板与派生

概述 类模板从类模板派生 类模板从模板类派生 类模板从普通类派生 普通类从模板类派生 1、类模板从类模板派生 template <class T1,class T2> class A { T1 v1; T2 v2; }; template <class T1,class T2> class B:public A<T2,T1> { T1 v3; T2 v4...

江南又一春 580

C++类模板

解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制。在上述代码中,如果T的数据类型传入的是像Person这样的自定义数据类型,也无法正常运行。总结:类模板和函数模板语法相似,在声明模板template后面加类,此类称为类模板。当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。T --- 通用的数据类型,名称可以替换,通常为大写字母。T --- 通用的数据类型,名称可以替换,通常为大写字母。

m0_53263647的博客 1009

C++泛型编程2——类模板,容器适配器,仿函数

模板编译  当编译器遇到一个模板定义时,它并不生成代码。只有当我们实例化出模板的一个特定版本时,编译器才会生成代码。当我们使用模板时,比编译器才生成代码。  这一特性影响了我们如何组织代码以及错误何时被检测到。   通常,当我们调用一个函数时,编译器只需要掌握函数的声明。   类似的,当我们使用一个类类型的对象时,类定义必须是可用的,但成员函数的定义不必已经出现。   因此我们将类定义和函数声

lixungogogo的博客 2257

【C++】-模板初阶(函数和类模板)

手把手带你模板先入门

qq_69369227的博客 626

C++模板编程:从函数模板到类模板的实例化与匹配机制详解

泛型编程是C++实现代码复用和类型安全的核心技术,它通过模板机制在编译期生成针对不同数据类型的特定代码。其基本原理是定义代码的通用蓝图,编译器根据实际使用的类型进行模板实例化,生成具体的函数或类。这种编译期多态技术避免了运行时开销,提升了程序性能,广泛应用于标准库容器、算法和通用工具开发中。在工程实践中,理解模板推演、SFINAE规则和重载决议机制至关重要,它们决定了编译器如何选择最匹配的模板版本。本文以C++模板为核心,深入解析函数模板与类模板的工作机制,包括编译器背后的类型推导和实例化过程,帮助开发者掌

weixin_33585822的博客 339
上一篇: 人成长中必须知道的20个故事
下一篇: 新年祝词
滴水禅师
博客等级 码龄22年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值