How can this be done. Can I make a map with 26 (letters of the dictionary) elements and than search for the corresponding value?Quote:
Originally Posted by Paul McKenzie
Printable View
How can this be done. Can I make a map with 26 (letters of the dictionary) elements and than search for the corresponding value?Quote:
Originally Posted by Paul McKenzie
Is this the right way?
this method is working btw.Code:typedef std::map<char,CString>look_up;
look_up lkTable;
lkTable.insert(look_up::value_type('a',"2"));
lkTable.insert(look_up::value_type('b',"2"));
lkTable.insert(look_up::value_type('c',"2"));
lkTable.insert(look_up::value_type('d',"3"));
lkTable.insert(look_up::value_type('e',"3"));
lkTable.insert(look_up::value_type('f',"3"));
lkTable.insert(look_up::value_type('g',"4"));
lkTable.insert(look_up::value_type('h',"4"));
lkTable.insert(look_up::value_type('i',"4"));
lkTable.insert(look_up::value_type('j',"5"));
lkTable.insert(look_up::value_type('k',"5"));
lkTable.insert(look_up::value_type('l',"5"));
lkTable.insert(look_up::value_type('m',"6"));
lkTable.insert(look_up::value_type('n',"6"));
lkTable.insert(look_up::value_type('o',"6"));
lkTable.insert(look_up::value_type('p',"7"));
lkTable.insert(look_up::value_type('q',"7"));
lkTable.insert(look_up::value_type('r',"7"));
lkTable.insert(look_up::value_type('s',"7"));
lkTable.insert(look_up::value_type('t',"8"));
lkTable.insert(look_up::value_type('u',"8"));
lkTable.insert(look_up::value_type('v',"8"));
lkTable.insert(look_up::value_type('w',"9"));
lkTable.insert(look_up::value_type('x',"9"));
lkTable.insert(look_up::value_type('y',"9"));
lkTable.insert(look_up::value_type('z',"9"));
CString CPM2Dlg::DecodeString(const CString & str)
{
int i,length;
CString buffer;
std::map<char,CString>::iterator iter;
length = str.GetLength();
for(i = 0; i < length; i++)
{
for(iter = dataHandler.lkTable.begin(); iter != dataHandler.lkTable.end(); ++iter)
{
if(str[i] == iter->first)
{
buffer += iter->second;
break;
}
}
}
return buffer;
}
There is no need to have a loop on iter.
1) If the only values of s[i] are 'a' thru 'z' you can simply use:
Code:for(i = 0; i < length; i++)
{
buffer += lkTable[ s[i] ];
}
2) if other values of s[i] are possible:
Code:for(i = 0; i < length; i++)
{
iter = lkTable.find( s[i] );
if (iter != lkTable.end())
{
buffer += iter->second
}
}
;) you're right. Thanks a lot.