您的位置:首页 > 其它

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

2013-04-05 09:56 1121 查看
想要这样的一个数据,如果是静态的,可以用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中为每个字符串操作函数提供了字符集映射。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: