c0d3r
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 19892503 Цитата: нужно взять цикл который ограничивает строку числом L.Вводим текст. потом кароче берем делаем такой же цикл ограниченный числом сиволов М.и копируем туда текст без разрыва,и все | Как-то так: Код: #include <iostream> #include <string> using std::cout; using std::cerr; using std::cin; using std::endl; using std::string; int main() { const size_t L = 20; const size_t M = 15; string line_orig; string line_result; cout << "Ввведите строку: "; getline(cin, line_orig); if (line_orig.size() > L) { cerr << "Текст превышает допустимую длинну в " << L << " символов!" << endl; return 1; } line_result = line_orig.substr(0, (line_orig.size() < M ? line_orig.size() : M)); cout << "Результирующая строка: " << line_result << endl; return 0; } | Добавлено: llerik Цитата: Цитата: - root у вас постоянно перезатирается новым, возвращенным элементом и поэтому второй и последующие элементы сами становятся хозяевами горы. | Это я понимаю по результату выполнения прогаммы, а в коде я этого не вижу, ткните носом пожалуйста | Код: root=search_insert (root, temp_eng, temp_count); | Переменной root всегда присваивается значение, которое возвращает ф-ция search_insert(). При этом ф-ция возвращает несколько "разные" значения: - если root пустой (равен NULL), при самом первом обращении, или элемента ещё нет в списке, то возвращается вновь созданный элемент, для которого выделяется память - если элемент уже есть в списке, то возвращается указатель на него (память не выделяется) Вот и выходит. Что при первом вызове нам возвращается указатель на вновь созданный элемент и он сохранается в переменной root. При втором и прочих вызовах возвращаются опять же указатели и они тоже сохраняются в переменной root, затирая наше первое значение. Цитата: В предпоследней строке стоит вызов функции search_insert, вот объясните мне пожалуйста, что это значит? Т.е. вот я представляю, что в третьей строке переменной root присваивается результат выполнения функции, а в предпоследней эта функция выпонляется, а результат ее выполнения сам по себе, что ли? Тогда какой смысл этой записи? | Вы про условные конструкции (if, в данном случае) читали? Тут в зависимости от условия возвращаемое ф-цией search_insert() значение, либо сохраняется в переменной, либо просто игнорируется (неиспользуется). Смысл тут в том, чтобы сохранить значение, которое нам вернёт ф-ция в самый первый раз. Цитата: И еще, ответе на вопрос, про функции New и Delete, написанный ранее: "Достаточно ли ограничиться только удалением root? Ведь функцию search_insert() мы присваиваем именно ей. Или опять не так?" | Нет, не достаточно. Нужно пройтись по всему списку и удалять (вызывая delete) каждый из узлов. Чтобы не было таких проблем, гораздо лучше было бы использовать std::vector и стандартные алгоритмы. |