• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Удалить все четные строки в динамическом массиве

  • Автор темы Вероника Эл
  • Дата начала
В

Вероника Эл

Написать программу на с++, в которой нужно удалить все четные строки в массиве, состоящем из динамических строк
1. Сформировать массив, состоящий из динамических строк.
2. Распечатать сформированный массив.
3. Выполнить обработку этого массива - удалить все четные строки в массиве
4. Распечатать полученный массив.
 
R

rrrFer

Что такое динамическая строка?
Код:
char *s = new char[25];
или
Код:
string s;

В обоих случаях - просто создаете массив, видимо запрашиваете у юзера какие-то данные:
Код:
int n;

cout << "n: ";
cin >> n; // спрашиваем у юзера количество строк

char **s = new char*[n];

for (int i = 0; i < n; ++i) {
  s[i] = new char[25];
  cout << "s[" << i << "]: ";
  cin >> s[i]; // запрашиваем у юзера i-тую стрку в цикле
}

cout << "before: ";
for (int i = 0; i < n; ++i) {
  cout << s[i] << endl; // выводим в цикле строки до преобразования
}

int j = 1; // номер строки, в которую будем переписывать
             // (первой удалим вторую строку, ее номер 1, т.к. индексация с нуля)
int i = 2; // номер строки, которая переписывается
while (i < n) {
  if (i % 2) { // строка нечетная (нумерация с нуля), ее надо переписать
    delete[] s[j];
    s[j] = s[i];
    j ++;
  }
  else {
    delete[] s[i]; // удаляем строку
  }
}

// теперь в массиве осталось j строк
for (int i = j; i < n; ++i) {
  delete[] s[i]; // остальные строки удаляем
}

n = j; // изменяем размер массива

cout << "after: ";
for (int i = 0; i < n; ++i) {
  cout << s[i] << endl; // выводим в цикле строки после преобразования
}

Код не проверял.
 
В

Вероника Эл

ввожу строки, если в строке пишу несколько слов, то выводит как на рисунке. потом просто выводятся все слова в столбик и всё, удаление не происходит
 

Вложения

  • Безымянный.png
    Безымянный.png
    2,3 КБ · Просмотры: 148
R

rrrFer

ввожу строки, если в строке пишу несколько слов, то выводит как на рисунке. потом просто выводятся все слова в столбик и всё, удаление не происходит
Используйте
Код:
cin.getline
вместо оператора >> при считывании строк. Оператор считывает последовательность символов до пробела или перевода строки, тогда как getline считывает до перевода строки или пока не заполнится буфер (в функцию отдельно передается размер строки). Примерно так:
Код:
std::cin.getline (s[i],25);
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!