1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Вопросы новичков и не только", создана пользователем Вероника Эл, 5 окт 2016.

  1. Вероника Эл

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

    rrrFer Гость

    Репутация:
    0
    Что такое динамическая строка?
    Код:
    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; // выводим в цикле строки после преобразования
    }
    Код не проверял.
     
  3. Вероника Эл

    Репутация:
    0
    Регистрация:
    5 окт 2016
    Сообщения:
    3
    Симпатии:
    0
    не работает(
     
  4. rrrFer

    rrrFer Гость

    Репутация:
    0
    как это проявляется?
    Возвращает ошибки при компиляции или выдает неправильные результаты при выполнении?
     
  5. Вероника Эл

    Репутация:
    0
    Регистрация:
    5 окт 2016
    Сообщения:
    3
    Симпатии:
    0
    ввожу строки, если в строке пишу несколько слов, то выводит как на рисунке. потом просто выводятся все слова в столбик и всё, удаление не происходит
     

    Вложения:

  6. rrrFer

    rrrFer Гость

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

Поделиться этой страницей