c++ | Не работает функция
Ничего не возвращает, как исправить? Должна вернуть ту строку что получает, но ту часть что идёт от индекса разрезанную по индексу. Короче отрезает кусок строки
string mb_substr(string text, int ind) {
int text_size = text.length();
string new_text;
for (int i = ind; i < text_size; i++) {
for (int j = 0; j < text_size - ind; j++) {
new_text[j] = text[i];
}
}
return new_text;
}
//Вызов функции - cout << mb_substr("dsakodaskoda", 7) << endl;
Ответы (1 шт):
1. Когда вы делаете вот так:
new_text[j] = text[i];
Размер вашего std::string не меняется, поэтому, когда вы возвращаете его из функции, он имеет размер 0, в результате чего вам выводится пустая строка. Для использования данной конструкции вы можете указать размер при создании, заполнив строку мусором:
std::string new_text(text_size - ind, ' ');
Но ещё лучше будет зарезервировать ожидаемое место и заполнять строку методом push_back (или аналогичными конструкциями напр. +=):
std::string new_text;
new_text.reserve(text_size - ind);
for (int i = ind; i < text_size; i++) {
new_text.push_back(text[i]);
}
2. Вам не нужен второй цикл. Если бы строки работали так, как вы предполагали, то каждый символ ожидаемого результата поочерёдно полностью заполнял бы собой результирующую строку, что вам не нужно.
3. Как отметил комментатор выше, в std::string уже есть метод который делает то, что вам нужно:
std::string("dsakodaskoda").substr(7);
Или в функции:
std::string mb_substr(const std::string& text, int ind) {
return text.substr(ind);
}