CString

何志丹

主要内容:

1,主要函数的实现

2,常用函数

3.CString与char []的相互转换

4,将NULL字节放入CString中

vc中最主要函数不易理解。

CString::CString(char *p)

{

int n=strlen(p);

m_data = new char[n+1];

strcpy(m_data,p);

}

CString::CString(CString &other)

{

int n=strlen(other.m_data);

m_data = new char[n+1];

strcpy(m_data,other.m_data);

}

CString& CString::operator = (CString& other)

{

delete[] m_data;

int n=strlen(other.m_data);

m_data = new char[n+1];

strcpy(m_data,other.m_data);

return *this;

}

String::~String()

{

delete [] m_data;

}

Collate,Compare       与一个字符长指针所指的字符串进行比较,与strcmp相同,它们的区别是,分别调用_tcscoll,_tcsicmp。

Delete

int Delete( int nIndex, int nCount = 1 )

返回值是被删除前的字符串的长度,nIndex是第一个被删除的字符,nCount是一次删除几个字符。根据我实验得出的结果:当nCount>字符串的长度时会出错,当nCount过大,没有足够的字符删除时,此函数不执行。

FindOneOf

int FindOneOf( LPCTSTR lpszCharSet ) const;

此函数的功能是在查找lpszCharSet中的任意一个字符,查到一个就把位置返回,没有查到返回0。如:

CString str = "0123456789";

int x = str.FindOneOf("31");

x的值是1。

Find

int Find( TCHAR ch ) const;

int Find( LPCTSTR lpszSub ) const;

int Find( TCHAR ch, int nStart ) const;

int Find( LPCTSTR pstr, int nStart ) const;

返回值查找到的序号,ch待搜索的字符,lpszSub待搜索的字符子串,nStart 从那里开始搜索。如:

CString str = "0123456789";

int x = str.Find("34",4);

返回的值是-1.

GetAt

TCHAR GetAt( int nIndex ) const;

返回标号为nIndex的字符,你可以把字符串理解为一个数组,GetAt类似于[].注意nIndex的范围,如果不合适会有调试错误。

Insert

int Insert( int nIndex, TCHAR ch )
int Insert( int nIndex, LPCTSTR pstr )
返回修改后的长度,nIndex字符(或字符串)插入后的标号。

Left

CString Left( int nCount ) const;

返回的字符串的前nCount个字符。

Right与Left类似

MakeLower ,MakeUpper改变字符的大小写

MakeReverse字符倒置,如:

CString str = "X0123456789";

str.MakeReverse();

str变为"9876543210X"

+=

const CString& operator +=( const CString& string );
const CString& operator +=( TCHAR ch );
const CString& operator +=( LPCTSTR lpsz );

将参数合并到自己身上。

如:       CString str = "0123456789";

str+="ha";

str为"0123456789ha";

str[]

TCHAR operator []( int nIndex ) const;

象处理字符数组一样处理字符串。

注意是只读的。

CString str = "0123456789";

str[0]='x';

是错误的。

TrimLeft,TrimRight

void TrimLeft( );

void CString::TrimLeft( TCHAR chTarget );

void CString::TrimLeft( LPCTSTR lpszTargets );

void TrimRight( );

void CString::TrimRight( TCHAR chTarget );

void CString::TrimRight( LPCTSTR lpszTargets );

CString str = "/n/t a";

str.TrimLeft();

str为“a”;

如果没有参数,从左删除字符(/n/t空格等),至到遇到一个非此类字符.

当然你也可以指定删除那些字符.

如果指定的参数是字符串,那么遇上其中的一个字符就删除.

CString str = "abbcadbabcadb ";

str.TrimLeft("ab");

结果"cadbabcadb "

int CString::Remove( TCHAR ch );

ch删除的字符.

返回删除字符的个数,有多个时都会删除.

CString 与char []之间的转换.

char str[100] = ”str”;

CString sstr = “sstr”;

str.Format(“%s”,str);

str = LPCTSTR sstr;

strcpy(str,(LPCTSTR)sstr);

如果是赋值,则要:

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('/0');
s.ReleaseBuffer();
// 使用完后及时释放,以便能使用其它的CString成员函数

str的值变了.

将NULL字节放入CString中
1,CString str("abc/0""def", 7);
  str +="g";
  int nLength = str.GetLength();
  nLength为8.
2,CString str("My name is hedan!");
  str.SetAt(5, 0);
  int nLength = str.GetLength();
注意:不是所有的CString成员函数都可以,在使用时一定要小心。

实例:动态配置数据源
CString strDsn,strDBQ;
strDsn = "DSN=test";
strDBQ.Format("DBQ=%s",strSourceMDBName);
CString strConnect = strDsn + " " + strDBQ ;
strConnect.SetAt(strDsn.GetLength(),'/0'); 
SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)", strConnect);

VC入门宝典三(String)的更多相关文章

  1. 数据治理之元数据管理的利器——Atlas入门宝典

    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置.但是其官方文档不是很丰富,也不够详细.所以整 ...

  2. mybatis入门系列三之类型转换器

    mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...

  3. Java入门(三):变量和运算符

    上次谈到了Java的基本数据类型,今天接着聊Java的变量.运算符. 一.变量 1.变量的分类 变量分为成员变量.局部变量和常量,其中成员变量又分为实例变量.类变量. 2.变量的定义 语法:变量类型( ...

  4. MyBatis基础入门《三》Select查询集合

    MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...

  5. ElasticSearch入门 第三篇:索引

    这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  6. grpc入门(三)

    grpc入门(三) 一.介绍 本文是关于grpc的第三篇博文,是对前两篇博文的具体代码实现,秉着个人一贯的风格,没有太多抒情和总结,直接就上代码. 文章代码参考:https://github.com/ ...

  7. SpringBoot入门(三)——入口类解析

    本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...

  8. SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心

    目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...

  9. Go 语言入门(三)并发

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(三 ...

  10. Elasticsearch入门教程(三):Elasticsearch索引&映射

    原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...

随机推荐

  1. SciTech-Theory-Phenomeon(Problem: Conditions+Process+Outcomes with Probability)->Experience->Concept(Natural+Common part of experiences)-> Principle(invest+research) -> Definition -> Theory -> Axiom

    SciTech Layers: Objective: Problem/Phenomeon: a objective Process and its Outcomes, and Conditions. ...

  2. babylon.js 学习笔记(6)

    接上回继续,今天继续捣腾动画,上一节咱们让汽车的轮子动了起来,回顾一下核心代码: //轮子转动 const wheelAnimation = (scene, wheels) => { //定义一 ...

  3. 性能优化:两条SQL索引优化,CPU占用率从40%降至25%

    我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...

  4. Intelligent standby list cleaner(清理备用内存工具)--九五小庞

    Intelligent standby list cleaner是一款待机列表清理软件,这款工具可以帮助用户监视计算机的内存使用情况,等计算机的内存使用到一定大小后,软件会自动清理内存列表,通过这种方 ...

  5. 跨平台自动化框架的OCR点击操作实现详解与思考

    在移动端自动化测试领域,基于文字内容的操作一直是一个技术难点.HttpRunner通过集成OCR(光学字符识别)技术,实现了高精度的文字定位与点击功能,为开发者提供了更加直观和可靠的自动化测试方案. ...

  6. Docker问题解决:Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host

    vi /etc/resolv.conf 添加 nameserver 8.8.8.8

  7. 转-OAuth2.0 原理流程及其单点登录和权限控制

    原文链接 单点登录是多域名企业站点流行的登录方式.本文以现实生活场景辅助理解,力争彻底理清 OAuth2.0 实现单点登录的原理流程.同时总结了权限控制的实现方案,及其在微服务架构中的应用. 1 什么 ...

  8. modbus移植到S32K146

    1.认识 modbus协议在工程应用领域非常广泛,本质上通过UART串口让主机和从机之间进行通信,modbus移植需要的知识涉及到:串口电路(485或者232),UART驱动,modbus协议 UAR ...

  9. MyEMS优势详解

    MyEMS 是一款开源能源管理系统,其优势主要体现在成本.功能.技术架构等多个方面,具体如下123: 低成本: 基于开源技术架构,企业无需支付软件授权费用,可降低 30%-50% 的初期部署成本.同时 ...

  10. PaoZhu C++ Web Framework比美Java SpringBoot 的注解

    PaoZhu C++ Web Framework 内置HTTP/2 ORM 可以完全开发Web生态,提供注解功能. C++ 注解机制更加简单 //@urlpath(admin_islogin,admi ...