将容器中(数组、集合)的数据串成字符串

开发工具VC7(VS2002)

核心代码用到MFC,测试代码用到stl

本代码功能,将容器中(数组、集合)的数据串成字符串

核心代码和扩展代码往往不是一个人完成的。 扩展代码和使用也很可能不是一个人写的。

//核心代码

template<class TYPE>

class IGetEleStr

{

public:

virtual  CString GetStr(const TYPE& ele) const =0 ;

};

class IGetSpe

{

public:

virtual CString GetSpe(int index) const = 0;

};

template<class EleTypePtr,class EleType>//如果是stl的迭代器,EleTypePtr不等于EleType*

CString STLToStr(EleTypePtr begin,EleTypePtr end, const IGetEleStr<EleType>& ele, const IGetSpe& spe )

{

CString str ;

int index = 0 ;//并不是所有的迭代器都支持相减

for( EleTypePtr it = begin ; it != end ; ++ it )

{

if( 0 != index )

str += spe.GetSpe(index);

index++;

str += ele.GetStr(*it);

}

return str;

}

//扩展代码

class CGetConstSpe : public IGetSpe

{

public:

CGetConstSpe(const CString strSpe)

{

m_strSpe = strSpe;

}

virtual CString GetSpe(int index) const

{

return m_strSpe;

}

protected:

CString m_strSpe;

};

template<class EleType>

class  CGetFormatStr : public IGetEleStr<EleType>

{

public:

CGetFormatStr(const CString& strFormat)

{

m_strFormat = strFormat;

}

virtual  CString GetStr(const EleType& ele) const

{

CString str;

str.Format(m_strFormat,ele);

return str;

}

protected:

CString m_strFormat;

};

//测试代码

#include "afxtempl.h"

#include <set>

void Ctest1Dlg::OnBnClickedButton11()

{

int a[] = {3,4,5,6,7,8};

CString str = STLToStr(a,a+sizeof(a)/sizeof(a[0]),CGetFormatStr<int>(_T("%d")),CGetConstSpe(_T(" ")));

AfxMessageBox(str);

//    CArray<float,float> f ;

f.Add(3.3);

f.Add(1.02);

f.Add(0);

f.Add(-1.33333334);

str = STLToStr(f.GetData(),f.GetData()+f.GetSize(),CGetFormatStr<float>(_T("%3.1f")),CGetConstSpe(_T(",")));

//    AfxMessageBox(str);

std::set<CString> sets;

sets.insert(CString(_T("a")));

sets.insert(CString(_T("c")));

str = STLToStr(sets.begin(),sets.end(),CGetFormatStr<CString>(_T("‘%s‘")),CGetConstSpe(_T(",")));

AfxMessageBox(str);

}

//结果分别为:

//3 4 5 6 7 8

//3.3,1.0,0.0,-1.3

//‘a‘,‘c‘

class CGet2ConstSpe : public IGetSpe//索引+1为index的倍数,则用strSpe分隔,否则用strNormalSpe

{

public:

CGet2ConstSpe(const CString strNormalSpe,const CString strSpe,int index)

{

m_strNormalSpe = strNormalSpe;

m_strSpe = strSpe;

m_index = index ;

}

virtual CString GetSpe(int index) const

{

if( ( m_index > 0 ) && ( index % m_index == 0 ) )

return m_strSpe;

return m_strNormalSpe;

}

protected:

CString m_strSpe;

CString m_strNormalSpe;

int m_index;

};

void Ctest1Dlg::OnBnClickedButton12()

{

int a[] = {3,4,5,6,7,8};

CString str = STLToStr(a,a+sizeof(a)/sizeof(a[0]),CGetFormatStr<int>(_T("%d")),CGet2ConstSpe(_T(" "),_T("\r\n"),5));

AfxMessageBox(str);

}

/*  运行结果

3 4 5 6 7

8

*/

class  CGetBOOLStr : public IGetEleStr<BOOL>

{

public:

CGetBOOLStr(const CString& strTrue=_T("真"),const CString& strFalse=_T("假"))

{

m_strTure = strTrue;

m_strFalse = strFalse;

}

virtual  CString GetStr(const BOOL& ele) const

{

return (ele) ? m_strTure : m_strFalse ;

}

protected:

CString m_strTure;

CString m_strFalse;

};

void Ctest1Dlg::OnBnClickedButton13()

{

BOOL a[] = {TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE};

CString str = STLToStr(a,a+sizeof(a)/sizeof(a[0]),CGetBOOLStr(),CGet2ConstSpe(_T(" "),_T("\r\n"),5));

//AfxMessageBox(str);

str = STLToStr(a,a+sizeof(a)/sizeof(a[0]),CGetBOOLStr(_T("√"),_T("×")),CGet2ConstSpe(_T(" "),_T("\r\n"),5));

AfxMessageBox(str);

}

//结果分别为

/*

真 真 假 假 真

真 真

*/

/*

√ √ × × √

√ √

*/

时间: 2024-08-08 05:24:18

将容器中(数组、集合)的数据串成字符串的相关文章

从给定的流中读取所有的数据转成字符串

public static String readStream(InputStream is){        try {            byte[] bs = new byte[1024] ;            int b = 0 ;            ByteArrayOutputStream baos = new ByteArrayOutputStream() ;            while((b=is.read(bs))!=-1){                b

Swift中数组集合-b

数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. var studentList1:Array<String> var studentList2: [String] 声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化.示例代码如下: var studentList1:Array<String> = ["张三","李四&

Swift 2.0学习笔记(Day 17)——Swift中数组集合

原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. var studentList1: Array<String> var studentList2: [String] 声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化.示例代码如下: var studentList1: Array<String> =

《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合

原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. var studentList1:Array<String>    var studentList2: [String] 声明的Array还不能用,还需要进行初始化 ,Array类型往往在声明的同时进行初始化.示例代码如下: var studentList1:Array<String> 

把类似数组结构的数据转成数组的几种方式

例如 : 将函数的 arguments参数转成数组格式 es5: [].slice.call(arguments) Array.prototype.slice.call(arguments) es6: Array.from(arguments)      能将具有 Iterator接口的数据格式(Set, Map)转成真正的数组 [...arguments]  也能将arguments转成数组

json-lib-2.4.jar Bug,json字符串中value为&quot;[value]&quot;结构时,解析为数组,不会解析成字符串

使用json-lib.jar 2.4进行json字符串转换为对象时发现一个bug.贴下测试代码: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency&

python中数组,元组,字典和字符串之间的转换

1.字典 字典转为字符串 >>> dict={'name':'zhzhgo','age':25} >>> print type(str(dict)),str(dict) <type 'str'> {'age': 25, 'name': 'zhzhgo'} >>> 字典转为元组 >>> dict={'name':'zhzhgo','age':25} >>> print type(tuple(dict)),t

将集合中对象按特定符号分隔成字符串

List<String> list =new ArrayList(); list.add("ab"); list.add("cd"); String str = Joiner.on(",").join(list); 最终结果:str=ab,cd 添加gradle依赖:compile group:'com.google.guava',name:"guava",version:20.0 原文地址:https://www

[docker] 管理docker容器中的数据

之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两种管理Docker中数据的主要方法. 数据卷 数据卷容器 数据卷 一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性 实现数据持久化或共享. 数据卷可以在容器之间共享和重复利用 可以对数据卷里的内容直接进行修改 对镜像的更新不会改变数据卷的内容 卷会一直持续到没有容器使