Форум программистов, компьютерный форум CyberForum.ru

Конкатенация строк - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
29.06.2012, 18:04     Конкатенация строк #1
Разбираю учебный пример - написать класс для работы со строками. Всего два поля:

C++
1
2
3
private:
    int _size; // длина строки, без нуль-символа
    char * _string; // внутреннее представление
Надо перегрузить оператор (+) для конкатенации. Сделал что-то вроде этого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
String String::operator + (const String & rhs) const
{
    char * buff = new char[_size + rhs._size + 1];
    
    strcpy(buff, _string);   // помещаем в буфер первую строку
    strcat(buff, rhs._string);  // добавляем в буфер вторую строку
    
    String res(buff); // вызов конструктора копирования
    
    delete [] buff;
    
    return res;
}
Вопрос, нет ли тут ошибок, (например при работе с памятью и использовании стандартных ф-ций для работы с char*) и что можно оптимизировать?

Не по теме:

Понимаю, что всё это велосипеды, но делаю, чтобы усвоить материал

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2012, 18:04     Конкатенация строк
Посмотрите здесь:

C++ Конкатенация строк
C++ конкатенация строк
Конкатенация строк C++
конкатенация строк C++
C++ Конкатенация строк
Конкатенация строк C++
C++ Конкатенация строк
C++ Конкатенация строк s1 и s2

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
29.06.2012, 18:24     Конкатенация строк #2
лучше бы было реализовать с использованием operator+=
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mstring operator+ ( const mstring& lhs, const mstring& rhs )
{
    mstring ret( lhs );
    ret += rhs;
    return ret;
}
 
void mstring::resize( size_type new_len )
{
    char *new_arr = new char[new_len + 1]();
    strcpy( new_arr, m_arr );
    delete [] m_arr;
    m_len = new_len;
    m_arr = new_arr;
}
 
mstring& mstring::operator+= ( const mstring& append )
{
    resize( m_len + append.m_len );
    strcat( m_arr, append.m_arr );
    return *this;
}
Yandex
Объявления
29.06.2012, 18:24     Конкатенация строк
Ответ Создать тему
Опции темы

Текущее время: 00:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru