Здравствуйте, <Аноним>, Вы писали:
А>На С++ можно вот так, а как на С?
На С++ можно проще.
using namespace std; // чтоб в глазах не рябило
typedef set<string> dict_type;
dict_type dictionary;
void init()
{
dictionary.insert("hi");
dictionary.insert("hello");
.....
}
string coprefix(string s) // лексикографически следующая строка за строками с префиксом s
{
while(!s.empty() && s.back()=='\xFF')
s.pop_back();
if(!s.empty())
++s.back();
return s;
}
// работа этой функции очень проста:
// "ABCяяя" --> "ABD" (где, в некоей кодировке, 'я'==0xFF)
// "ABCDEF" --> "ABCDEG"
// "" --> "" - особый случай, пустой префикс накрывает весь диапазон
// "яяя" --> "" - не существует бОльшей строки, поэтому тоже превращаем в особый случай
typedef dict_type::const_iterator dict_iter;
pair<dict_iter,dict_iter> find_by_prefix(string s)
{
dict_iter const i = dict.lower_bound(s);
string const s1 = coprefix(s);
dict_iter const j = next.empty() ? dict.end() : dict.lower_bound(s1);
}
А>И еще подскажите с вот такой регуляркой \x — это что такое?
Это 16-ричный код символа, '\x
hh'. Например, '\x1B' = char(27) = ESC.
А '\
ooo' где o=0..7 — восьмеричный код. '\33', '\033' = char(27) = ESC.
... << RSDN@Home 1.2.0 alpha rev. 655>>