VC中二维字符串数组使用总结()

想要这样的一个数据,如果是静态的,可以用C语言来定义:

	char array[][3][100] = 
	{
		{"ABC01", "ABC02", "ABC03"},
		{"ABC11", "ABC12", "ABC13"},
		{"ABC21", "ABC22", "ABC23"},
		{"ABC31", "ABC32", "ABC33"},
	};

注意:上面的声明是初始化了4行,每行3列,每个空间为不超过100个的字符(含‘\0’);


如果是动态的数据,如何声明并使用,下面使用MFC中的CArray<CStringArray, CStringArray &>编译失败:

	CStringArray	ssRows;//每一行字符串数组
	CArray<CStringArray, CStringArray &> array;//之后去掉了&,仍旧编译失败

	//
	// 创建一个二维的字符串表格
	//
	int i, j;
	array.RemoveAll();
	for (i=0; i<100; i++)
	{
		ssRows.RemoveAll();
		for (j=0; j<5; j++)
		{
			CString str;
			str.Format("ABC%d%d", i, j);
			ssRows.Add(str);
		}
		array.Add(ssRows);
	}

	//
	// 访问这个字符串表格
	//
	for (i=0; i<array.GetSize(); i++)
	{
		ssRows = array.GetAt(i);
		for (j=0; j<ssRows.GetSize(); j++)
		{
			CString str = ssRows[j];
			TRACE("%s\t", str);
		}
		TRACE("\n");
	}
编译失败的原因不明白!

在网上查到,据说CArray<CStringArray *, CStringArray *>是成功的,但考虑到引进来指针,对CString、CStringArray的内存分配、构造函数、析构函数不熟,没在这上面多花心思;


换成声明vector<CStringArray> array;仍旧编译失败:

	CStringArray ssRows;
	vector<CStringArray> array;
	int i, j;

	//创建二维字符串表格
	for (i=0; i<100; i++)
	{
		ssRows.RemoveAll();
		for (j=0; j<5; j++)
		{
			CString str;
			str.Format("ABC%d%d", i, j);

			ssRows.Add(str);
		}
		array.push_back(ssRows);
	}

	//访问二维字符串表格
	for (i=0; i<array.size(); i++)
	{
		ssRows = array[i];
		for (j=0; j<ssRows.GetSize(); j++)
		{
			CString str = ssRows[j];
			TRACE("%s\t", str);
		}
		TRACE("\n");
	}

最后还是全部使用STL, vector<vector<string> >,成功:

	vector<string> ssRows;
	vector<vector<string> > array;  //小心两个>>不要连在一起!!

	int i, j;

	//创建二维字符串表格
	for (i=0; i<100; i++)
	{
		ssRows.clear();
		for (j=0; j<5; j++)
		{
			char buf[100] = {0};
			sprintf(buf, "ABC%d%d", i, j);
			string str(buf);

			ssRows.push_back(str);
		}
		array.push_back(ssRows);
	}

	//访问二维字符串表格
	for (i=0; i<array.size(); i++)
	{
		ssRows = array[i];
		for (j=0; j<ssRows.size(); j++)
		{
			string str = ssRows[j];
			TRACE("%s\t", str.c_str());
		}
		TRACE("\n");
	}

使用STL唯一的不便是和CString单字节、双字节UNICODE及多字节之间的转换,好在VC中为每个字符串操作函数提供了字符集映射。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值