Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2016, 18:01   #1
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию Строка с динамической памятью

Задача:
Цитата:
Удаление символов Написать функцию, обеспечивающую ввод с клавиатуры строки неограниченной длины без редактирования. Написать функцию, которая удаляет символы, стоящие между двумя определенными символами. Символ вводится пользователем.

Примечание: В каждой задаче должна быть реализована проверка на целостность кучи. При работе со строками учитывать символ конца строки (байт с нулевым значением).
Заполнение элементов массива (там, где это требуется) должно быть реализовано в виде отдельной функции. В этой функции запрашивается количество элементов массива, затем пользователю предоставляется выбор – либо вводить массив с клавиатуры, либо заполнить его автоматически (случайными числами).
В случаях, когда функция сама формирует массив, она должна посредством своих аргументов (объявленных как указатели) передать в вызывающую программу новый массив и число его элементов. Возвращаемое функцией число должно означать код ошибки (например, 0 – нет ошибки, ненулевое число – код конкретной ошибки). Во всех задачах, где необходимо вводить строки (не)ограниченной длины без редактирования, следует иметь в виду, что для хранения строки необходимо использовать динамическую память. Размер блока, выделенного под строку, увеличивается при вводе очередного символа. Строка генерируется внутри функции ввода. Функция возвращает указатель на начало строки. Ввод строки завершается при нажатии клавиши Enter, код Enter в строке не сохраняется.
Если на каком-либо этапе память выделить невозможно, то необходимо освободить всю выделенную ранее память и завершить программу. Особое внимание уделить обработке различных ошибок – при их возникновении необходимо освобождать все ставшие ненужными ресурсы. При формировании нового массива можно реализовать любой из следующих алгоритмов, либо разработать свой: 1) создать новый массив и перенести в него нужные элементы. 2) скопировать исходный массив и поэлементно его изменять (например, переставлять элементы).
Код:
#include <iostream>
#include <string>
using namespace std;

void del(string str, char a, int k)
{
}
	
	



int main()
{
	setlocale(LC_ALL, "Russian");
	char a;
	int k;
	cout << "Введите символ" << endl;
	cin >> a;	
	cout << "Введите текст" << endl;
	string str;
	getline(cin, str);
	cin >> str;
	k = sizeof(str);
	cout << "Результат: " << endl;
	del(str, a, k);
	system("pause");
	return 0;
}
Нужна помощь в написании программы, алгоритм функции del таков:
сперва используем цикл for для нахождения первого элемента a, как только его находим, цикл прекращаем и начинаем новый цикл, отсчитываемый от первой позиции a. В нем любой символ, не равный a, заменяется на _. В конце выводим получившуюся строку. Помогите реализовать этот алгоритм.
Narsky вне форума Ответить с цитированием
Старый 29.06.2016, 18:40   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а новый цикл зачем?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.06.2016, 18:56   #3
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

ну до первого a символы нельзя удалять, а после первого можно.
Или у вас идея, как сделать это с помощью одного цикла?
Narsky вне форума Ответить с цитированием
Старый 29.06.2016, 19:04   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Или у вас идея, как сделать это с помощью одного цикла?
да какая нафиг идея, всё левой пяткой за один перекур пишется, на автопилоте.
пример входной и выходной строки дай, чтобы недоразумений не возникло.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.06.2016, 19:09   #5
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

Пример входной и выходной строки?
Цитата:
Входная строка: abcdakhudascsdhcad
Выходная строка: abc________c___cad
Надеюсь, я вас правильно понял.
Narsky вне форума Ответить с цитированием
Старый 29.06.2016, 19:15   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я чот не понял, а где закономерность-то? как здесь из строки 1 получается строка 2?
объсни тупо словами.
Код:
abcdakhudascsdhcad
abc________c___cad
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.06.2016, 19:17   #7
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

Все символы, заключенные между символами c, заменяются на _
Narsky вне форума Ответить с цитированием
Старый 29.06.2016, 19:26   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

т.е. после последней "с" удалять нинада?
и почему "с"? говорил же "а"!
Цитата:
сперва используем цикл for для нахождения первого элемента a, как только его находим, цикл прекращаем и начинаем новый цикл, отсчитываемый от первой позиции a. В нем любой символ, не равный a, заменяется на _.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.06.2016, 19:31   #9
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

Если такое возможно, то да)
a как переменная, которую нужно ввести. В примере был введен символ 'c'
Narsky вне форума Ответить с цитированием
Старый 29.06.2016, 19:41   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Если такое возможно, то да)
тогда перед основным циклом надо найти индекс последнего вхождения символа и гнать сначала и до этого индекса, а не до упора.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что с динамической памятью? Вероника99 Помощь студентам 1 18.01.2014 23:35
Проблема с динамической памятью в си Hacker))) Общие вопросы C/C++ 0 16.06.2012 22:35
Паскаль. Работа с динамической памятью. McFrey Помощь студентам 1 06.04.2012 16:56
Списки (Си). Проблема с динамической памятью. hak555 Помощь студентам 0 18.12.2011 21:20
ошибка в работе с динамической памятью thrashkid Общие вопросы C/C++ 8 30.06.2011 00:48