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++)
{c语言如何创建字符串数组
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;仍旧编译失败:
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<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中为每个字符串操作函数提供了字符集映射。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。