C: обойти бинарное дерево рекурсией
От: Аноним  
Дата: 09.06.08 12:41
Оценка:
Покажите примерчик для системы поиска.
т.е у меня есть строка с начальным символом A, B или C
и мне нужно в зависимости от первого символа выбрать в структуре слова начитающиеся на эту букву на С, не на С++.
Apple
Acer

Beer
Beep

Clean
Clear
Call
Только так, что-бы если я ввожу не один символ, а например два Ap, то вывелось только Apple
На С++ можно вот так, а как на С?

И еще подскажите с вот такой регуляркой \x — это что такое?

typedef std::list<std::string>          StringList;
typedef smart_ptr<StringList>           StringListPtr;
typedef std::map<char, StringListPtr>   StringTable;
typedef std::pair<char, StringListPtr>  StringTablePair;

void Init(StringTable & Table)
{
       StringListPtr H_List = new StringList;
       H_List.push_back("hi");
       H_List.push_back("hello");
       H_List.push_back("hacker");

       StringListPtr W_List = new StringList;
       W_List.push_back("world");
       W_List.push_back("word");

       StringListPtr C_List = new StringList;
       C_List.push_back("c++");

       Table.insert(StringTablePair('h', H_List));
       Table.insert(StringTablePair('w', W_List));
       Table.insert(StringTablePair('c', C_List));
}

bool IsMatch(const std::string & sStr, StringList & List)
{
       for (StringList::iterator it = List.begin(), end = List.end(); it != end; ++it)
             if (sStr == *it)
                   return true;
       return false;
}

bool IsMatch(const std::string & sStr, StringTable & Table)
{
       if (sStr.size() == 0)
            return false;

       StringTable::iterator it = Table.find(sStr[0]);
       if (it == Table.end())
            return false;

       return IsMatch(sStr, *(*it));
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.