Re: string search
"RB" <NoMail@NoSpam> ha scritto nel messaggio
news:g84t4c02msv@news5.newsguy.com...
I've pasted the finished routine below if you have time give me some
constructive
criticism on the code. Try not to be too frustrated with my code, I'm not
a professional
programmer but rather a hobby novice that writes stuff to help me out at
work.
Everyone of us started as a beginner, so: no problem!
I did not copy-and-paste'd the function in Visual Studio, but I would give
you some suggestions during the reading of your code.
WndViewString is a CString that contains the current view data.
WVStrIndex is an index of the WndViewString
LenWVStr is the length of WndViewString
As a general rule, in C++ there is a tendency to use lower case letter as
initial of variable names (capital letters as initial letters are reserved
for class names, or methods, etc.), so you might want to use variable names
like "myVar" instead of "MyVar". But it is just personal style...
//Find and Capitalize first letter of certain keywords
int Find_Index, RetVal, NounIndex = 0, CurNounLen;
I would use variable names like findIndex, retVal, nounIndex, curNounLen.
Moreover, I would define each variable on a single separate line, e.g.
int nounIndex = 0;
int findIndex = -1;
...
Moreover, if possible, I would define variables in the point of code where
they are needed, and not all on the top of the function (it was mandatory in
C, but not in C++).
TCHAR * Noun[] = {" north ", " south ", " east ", " west ", "
northeast ", " northwest ", " southeast ", " southwest "};
I would use an array class for that, instead of raw C-style arrays.
e.g.
typedef std::vector< CString > StringList;
StringList nouns;
nouns.push_back( _T(" north ") );
nouns.push_back( _T(" east " ) );
...
Using a robust array container class helps you in preventing buffer
overruns, which may lead to security problems, or to corruption of stack or
heap.
Note that if you use TCHAR or CString, you should decorate your string
literals using _T() (so: _T(" north ") instead of " north ").
You can use MFC container classes like CStringArray if you want (I like
STL's std::vector for arrays, other quality programmers here like David
Ching like CStringArray and MFC containers).
int NounCt; // Number of Nouns NounCt = (sizeof Noun / sizeof
*Noun);
I would define the variable and assign its value in one statement.
// Number of nouns
int nounCount = (int) nouns.size();
std::vector::size() returns the number of items in the container; size()
returns a value of type size_t, which should be casted to int.
You can use also modern C++ style casts:
int nounCount = static_cast<int>( nouns.size() );
// CurNounLen = 0; ending up not needing this
WVStrIndex = 0; // reset for start
Find_Index = 0; // etc.
I prefer putting comments above the line they refer, e.g.
// Reset for start
strIndex = 0;
findIndex = 0;
(I don't like floating comments on the right of statements.)
My 2 cents.
Giovanni