Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверить правильность кода функций работы со стро 
:(
    Опции темы
vovamakr
Дата 17.11.2015, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 2.11.2015

Репутация: нет
Всего: нет



Нужно написать функции с рядком такие как, вставка в конец рядка и в ставка в рядок , удаление значения. Правильно я сделал? Проверял, все норм работает. Но может есть баги?в функциях Append еще нужно ссувать "\0", как это сделать?
Код

void Append(String* string, char ch)
{
    string->str = (char*)realloc(string->str, string->capacity * sizeof(char));
    string->str[string->length] = ch;
    ++string->length;
}
 
void Append(String* string1, const String* string2)
{
    string1->str = (char*)realloc(string1->str, string1->capacity * sizeof(char));
    for (unsigned index = 0; index < string2->length; ++index)
        string1->str[string1->length + index] = string2->str[index];
    string1->length = string1->length + string2->length;
 
}
 
void Insert(String* string, unsigned index, char ch)
{
    if (!(string->capacity > string->length))
    {
        string->capacity = 2 * string->capacity;
        string->str = (char*)realloc(string->str, string->capacity * sizeof(char));
    }
    for (unsigned current = string->length; current > index; --current)
        string->str[current] = string->str[current - 1];
    ++string->length;
    Set(string, index, ch);
}
void Remove(String* string, unsigned index)
{
    for (unsigned current = index + 1; current < string->length; ++current)
        string->str[current - 1] = string->str[current];
    --string->length;
 
}

PM MAIL   Вверх
feodorv
Дата 18.11.2015, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(vovamakr @  17.11.2015,  15:08 Найти цитируемый пост)
рядок

Что это?


Цитата(vovamakr @  17.11.2015,  15:08 Найти цитируемый пост)
string->capacity

Не меняется capacity в вызовах Append. realloc(...) совсем не обязательно делать при каждом вызове предлагаемых функций. sizeof(char) есть 1 всегда. И да, \0 не учитывается никак.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 19.11.2015, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Добавлять '\0' каждый раз не обязательно. При необходимости преобразовать в C-строку, его можно добавить.
Код

const char* GetCString(String* string)
{
  if (string->capacity <= string->length)
    string->str = (char*)realloc(string->str, string->capacity = string->length + 1);
  string->str[string->length] = '\0';
  return string->str;    
}

PS: почему-то в старом Винграде пропала кнопка добавления сообщеня.
PPS:  а в Линуксе работает!

Этот ответ добавлен с нового Винграда - http://vingrad.com

Это сообщение отредактировал(а) math64 - 23.11.2015, 15:53
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.