fix_string#2
Conversation
| memset(str, c, size_of_string); | ||
| } | ||
|
|
||
| String(); |
|
|
||
| String(std::initializer_list<char> lst) { | ||
| size_of_string = lst.size(); | ||
| capacity = 2 * size_of_string; |
|
|
||
| String& operator+=(const String& rhs) { | ||
| while (size_of_string + rhs.size_of_string >= capacity) { | ||
| str = (char*)realloc(str, 2 * size_of_string); |
| friend std::istream& operator>>(std::istream &in, String &String); | ||
|
|
||
| String substr(size_t start, size_t count) { | ||
| String new_string; |
There was a problem hiding this comment.
Не поправила по комменту из предыдущего pull request'а
|
|
||
| void push_back(char add) { | ||
| if (size_of_string + 1 == capacity) { | ||
| str = (char*)realloc(str, size_of_string * 2); |
| void push_back(char add) { | ||
| if (size_of_string + 1 == capacity) { | ||
| str = (char*)realloc(str, size_of_string * 2); | ||
| capacity *= 2; |
| } | ||
| void clear() { | ||
| size_of_string = 0; | ||
| str = nullptr; |
There was a problem hiding this comment.
Память течет. Зачем зануляешь указатель? Лучше str[0] = '\0'
|
|
||
| void Shrink_to_fit() { | ||
| capacity = size_of_string + 1; | ||
| str = (char*)realloc(str, size_of_string); |
| return new_string; | ||
| } | ||
|
|
||
| size_t find(String substring) { |
There was a problem hiding this comment.
Я бы переписал здесь в двойной цикл. Как будто должно работать, но выглядит очень непрозрачно. Я бы точно потестил на разных входах. (Попробуй в том числе пустые строки и другие краевые случаи).
| friend std::ostream& operator<<(std::ostream &out, const String &String); | ||
| friend std::istream& operator>>(std::istream &in, String &String); | ||
|
|
||
| String& substr(size_t start, size_t count) { |
There was a problem hiding this comment.
Ты возвращаешь ссылку на объект, время жизни которого привязано к блоку функции. Так делать нельзя, так как то что ты вернешь уже перестанет существовать. Думаю здесь нужно возвращать не ссылочный тип, а обычный String.
| return new_string; | ||
| } | ||
|
|
||
| size_t find(String& substring) { |
There was a problem hiding this comment.
Метод find должен быть по смыслу константный. Ты ведь не собираешься в нем менять свою строку. Также и аргумент нужно пометить константным const String& substring.
There was a problem hiding this comment.
Кроме того, у тебя не сможет создаться временный объект, если ты не пометишь этот аргумент как константный.
То есть, когда ты вызываешь
str.find("44");
У тебя создается временный объект String, который существует до конца выполнения функции (или говорят еще фрейма).
| return size_of_string; | ||
| } | ||
|
|
||
| size_t rfind(String& substring) { |
There was a problem hiding this comment.
Здесь те же замечания, что и про find.
No description provided.