Download source files - 17 Kb
Introduction
One of the reasons I left C and began to use C++ was CString and even more so CStringArray.
These two classes are worth all the other aggravation when going OO. I don't claim that they are
perfect. There are things missing in both of those classes and I would like to share this extension of
CStringArray that I have made.
Finding an string in a CStringArray
One of the things that I think are missing in CStringArray is a Find method. I find myself wanting to get
a specific string out of the array and I know part, or the whole, of it. Not the position in the array.
So I added this method. It is very straight forward and uses CString::Find to find the string.
Example:
meStringArray arr;
arr.Add("This is a String");
arr.Add("The second string");
arr.Add("the 3:rd string");
int i=arr.Find("3:rd");
CString sBuf;
sBuf=arr.GetAt(i);
Array of NULL terminating strings
Some SDK-functions and some classes still using an array of NULL terminating strings. e.g. CFileDialog
uses this kind of array for the filters. GetProfileString("section",NULL,"",buf,sizeof(buf));
also uses it,
and there are many more. So every time you need to use this class/function you have to go back to C and do a
lot of loops. Well I finally got tired of it and extended CStringArray with two methods; AddBuf()
and GetBuf()
.
The first will take an array of NULL terminating strings and add it to the StringArray, and the second will do
the reverse
Example GetBuf:
CFileDialog dlg;
meStringArray filter;
filter.Add("All files");
filter.Add("*.*");
filter.Add("Doc files");
filter.Add("*.doc");
filter.Add("Text files");
filter.Add("*.txt");
dlg.m_ofn.lpstrFilter=filter.GetBuf();
dlg.m_ofn.lpstrInitialDir=initDir;
dlg.m_ofn.Flags |= OFN_SHAREAWARE;
int rc=dlg.DoModal();
if(rc==IDOK)
{
m_filepath=dlg.GetPathName();
UpdateData(FALSE);
}
Example AddBuf:
meStringArray arr;
char buf[1024];
GetProfileString("devices",NULL,"",buf,sizeof(buf));
arr.AddBuf(buf);
CString sPrintName = arr.GetAt(2);
Well that's it! It's not a very large class so there is not so much to say.
I hope that someone will find use for this and PLEASE let me know what you think!
This is the first class I ever published so please say what you think about it, good, bad.
// Anders