C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Строки, Работа со строками в BCB
У
Отправлено: 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);

Вернуться в Вопросы программирования в C++Builder