Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 506

Раздел: C++
/ вопрос открыт /

Приветствую, уважаемые эксперты!
Возник вопрос по строкам. В с++ два типа строк - массив char и класс string. Какой и для каких целей лучше использовать?

Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 16 июля 2011, 18:01
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Gooddy

Здравствуйте, Евгений Eklmn!
Очень просто. Массив char не следует использовать, если конечно нет веских оснований.
А класс string очень полезный и функциональный.

Возможно конечно, что массив char выигрывает в скорости, но это далеко не факт.

Ответ отправил: Gooddy (статус: 3-ий класс)
Время отправки: 16 июля 2011, 19:35

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, Евгений Eklmn!
Если честно сказать, то в С++ нет строк. Массив сhar - это массив байтов, просто его интерпретируют как строку (так принято).
Класс string - такого вообще нет. Есть std::string из стандартной библиотеки классов. Хотя библиотека std и является частью стандарта, но она не является неприемлемой частью с++. То есть, может быть компилятор под какую то экзотическую платформу, где не будет этого класса.

В библиотеках, которые идут с Visual Studio есть класс CString, который подобен std::string по функционалу.

Мой совет - изучать и использовать std::string, как класс, который решает большое кол-во задач, в стандартной библиотеке есть много функций и алгоритмов для решения типичных задач (сортировка, поиск). Параллельно разбираться с массивом символов и операциями над ними - от них никуда не деться. Как минимум нужно уметь правильно преобразовать в std::string.

При правильной работе массив символов (char[]) будут самими эффективными, но кол-во кода для этого может быть очень большим. Малейший шаг в сторону и программа падает с треском. А класс std::string в большинстве случаев дает очень хороший и быстрый код без существенного углубления в детали.

В целом, учить нужно оба способа представления строк, даже написать пару-тройку своих велосипедов, сравнить их по качеству и скорости с стандартными, может у Вас что то и получится интересное, но опыта наберетесь.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 июля 2011, 21:19
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 18 июля 2011, 19:27; участников в обсуждении: 3.
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 17 июля 2011, 18:53 [#1]:

А что, например, может считаться веским основанием?
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
bugmenot

bugmenot (статус: 3-ий класс), 18 июля 2011, 10:02 [#2]:

char[N] это тип из сей, не из плюсов

Цитата (Gooddy):

массив char выигрывает в скорости, но это далеко не факт
Чепуха, большинство операций над asciiz медленнее. А еще присутствует узнаваемый расплывчатый стиль; не бери пример с этого чувака ;­-­)
виконання програми розпочинається з того самого мiсця, де призупинилося.

Егор

Егор (статус: 10-ый класс), 18 июля 2011, 18:13 [#3]:

Цитата (bugmenot):

Чепуха, большинство операций над asciiz медленнее

йинтересно. это какие же?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 18 июля 2011, 18:21 [#4]:

Цитата (bugmenot):

А еще присутствует узнаваемый расплывчатый стиль

а это про что?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
bugmenot

bugmenot (статус: 3-ий класс), 18 июля 2011, 19:27 [#5]:

Цитата (Егор):

интересно. это какие же?

Все, которые зависят от текущей длины asciiz и вычисляют её.

Цитата (Егор):

а это про что?

Про уклончивые ответы. Имён не называю.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.