У |
Отправлено: 11.07.2005, 16:22 |
|
Не зарегистрирован
|
Всем привет
Подскажите какой тип строк BCB лучше использовать для следующей задачи (кратко): есть большой массив строк, длина которых известна заранее, необходимые операции: только сравнение двух строк без учета регистра, все. критерий — максимизация скорости выполнения операций
Так какой тип
char*
std::string
AnsiString
PS Только начал переползать на BCD с Дельфей |
|
Gedeon |
Отправлено: 11.07.2005, 17:34 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
char*
|
|
Dima |
Отправлено: 12.07.2005, 07:03 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
наилучший выбор — char*, с другой стороны тип std::string даёт большую гибкость, а перейти от string к char* легче чем в обратную сторону
вот пример сравнения двух строк без учета регистра из книги Страуструпа
CODE |
int cmp_nocase(const string& s, const string& s2)
{
string::const_iterator p = s.begin();
string::const_iterator p2 = s2.begin();
while(p!=s.end() && p2!=s2.end())
{
if(toupper(*p)!=toupper(*p2))
return (toupper(*p)< toupper(*p2))?-1:1;
++p; ++p2;
}
return(s2.size()==s.size())?0:(s.size()<s2.size())?-1:1;
} | |
|
У |
Отправлено: 12.07.2005, 08:40 |
|
Не зарегистрирован
|
Ок, спасибо, тоже смотрел в сторону char*, гибкость то мне как раз в данном случае не нужна
Кстати а где можно скчать книжку Страуструпа в электронном виде? |
|
Dima |
Отправлено: 12.07.2005, 10:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
Где можно скачать, незнаю, сам бы скачал.
этот код легко перевести в char*
CODE |
int cmp_nocase(const char *s, const char *s2)
{
char *p = s;
char *p2 = s2;
while(p!='\0' && p2!='\0')
... |
Отредактировано Dima — 12/07/2005, 10:23 |
|
VovaN |
Отправлено: 12.07.2005, 11:30 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
Скачать можнотут.
А тут есть не только Стауструп. |
|
У |
Отправлено: 12.07.2005, 14:19 |
|
Не зарегистрирован
|
спасибо за ссылки
а кстати варианты предложенных функций будут с кирилицей?
а то я вроде хотел уже AnsiStrIComp использовать |
|
Gedeon |
Отправлено: 12.07.2005, 14:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
не надо использовать никаких самописных функций для такого сравнения, все уже готово см. хэлп
CODE |
int strcmp(const char *s1, const char *s2);
int wcscmp(const wchar_t *s1, const wchar_t *s2);
int _mbscmp(const unsigned char *s1, const unsigned char *s2); |
|
|