Форум программистов, компьютерный форум CyberForum.ru

Нужно из массива удалить нулевые элементы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выход по Esc из любого места программы http://www.cyberforum.ru/cpp-beginners/thread377134.html
Привет! Изучаю С++ на примере создания консольной программы. Типа - ввели данные, вывели данные. Вопрос - а как выйти из программы в любом месте по нажатию Escape? Можно конечно перед каждым началом ввода символов проверять функцией код вводимого символа и если он 27 то - exit. Но если будет 100 строк для ввода данных - 100 раз проверять код клавиши, наверное, было бы крайне неразумно.
C++ Полиморфизм и освобождение памяти class A{ // базовый класс ... }; class B : public A{ // унаследованный от класса A ... }; далее в программе: B *b = new B; http://www.cyberforum.ru/cpp-beginners/thread377122.html
C++ Для матрицы размером m x n вычислить сумму элементов матрицы
Доброго всем времени! Есть задачка: Для матрицы размером m x n вычислить сумму элементов матрицы. Умножить на это число элементу k-той строки. Значение k вводится. Исходная матрица задается в виде двумерного массива случайным образом. Вывести на экран исходную и результирующую матрицы. Так же нужно реализовать возможность ввода кол-ва строк и столбцов.
C++ Массив указателей на строки
Здравствуйте! В общем нужно передать в функцию массив строк (чистый C) Как правильнее это сделать и в дальнейшем обработать в самой функции. Примерно так: void func (char *p) {} или void func (char **p) {} Ведь инфа. о кол-ве указателей теряется. Что посоветуете?? (Передавать допл. инфу о кол-ве указателей или последним элементом делать NULL указатель.
C++ Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. http://www.cyberforum.ru/cpp-beginners/thread377078.html
Доброе утро! Я начинаю только осваивать программирование.Читаю - решаю задачи - пытаюсь разбираться в ошибках. Написал программу с циклами - идея такая - вводят оценки от 0 до 100 включительно,затем высчитывают средний балл.Если хотят закончить ввод вводят -1. Я постарался исключить все проблемы из серии: ввели число отрицательное или больше 100,деление на 0... Знаю что не соблюдены "правила...
C++ Приложение WinApi на C++ После компиляции выводит следующее сообщение "Необработанное исключение в "0x7672828c" в "Диспетчер.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc"." подробнее

Показать сообщение отдельно
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
03.11.2011, 18:33     Нужно из массива удалить нулевые элементы
Цитата Сообщение от Байт Посмотреть сообщение
Понял. Попробуем так
C
1
2
for(m=i=flag=0; i<n; i++) 
  if (a[i]!='0' && flag)  { a[m++] = a[i]; flag=1; }
Так пойдет? Или совершенству нет предела?
Можно еще оптимизировать. Сначала пропускаем все элементы до первого встреченного нуля, а уже после (только после этого) начинаем перезаписывать массив, начиная с той позиции:

C++
1
2
3
4
for (m = 0; m < n && a[m] != 0; m++)
   ;
for(i = m+1;  i < n; i++) 
  if (a[i] != 0)  a[m++] = a[i];
После двух циклов переменная m содержит "новый" размер массива.
Думаю, что это самый оптимальный вариант. У кого есть возражения готов выслушать, но сначала проанализируйте его.

Добавлено через 3 часа 42 минуты
Ну, раз нет желающих высказать свое мнение, то остаюсь при своем мнении, что мною написан самый оптимальный вариант удаления элементов из произвольного массива. Пошел патентовать свой алгоритм
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru