Форум программистов, компьютерный форум 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"." подробнее

Показать сообщение отдельно
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
03.11.2011, 12:12     Нужно из массива удалить нулевые элементы
Цитата Сообщение от NeRRouZ Посмотреть сообщение
Нужно из массива удалить нулевые элементы

на примере 1 0 2 0 3 0 4 0 5 0 -> выдает правильно 1 2 3 4 5
а если я ввожу 0 0 0 0 0 0 0 0 9 0 -> выдает 0 0 0 0 9
или 1 0 0 2 0 3 0 4 0 5 - > выдает 1 0 2 3 4 5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
const int n = 10;
 
int main()
{
 
    int i, j;
 
    int a[n];
 
    int m = n;
 
    for (i=0; i<n; i++)
        cin>>a[i];
        
    for (i=0; i<m; i++)
        if (a[i] == 0)
        {
            for (j=i; j<n-1; j++)
            {
                a[j] = a[j+1];
                
            }
            m--;
        }
        
    
    cout<<"---------------------------------"<<endl;
    for (i=0; i<m; i++)
        cout<<a[i]<<" ";
 
return 0;
}
к --m добавь ещё --i

потому что если у тебя больше одного нуля подряд, то он удаляет один 0, а остальные не проверяет. Т.е. тебе нужно заново проверить перемещённый элемент.
По твоей проге
1 0 0 2 0 3 0 4 0 5 - он здесь первый 0 уберёт( 1 0 2 0 3 0 4 0 5), но i будет уже на элементе со значением 2, т.е второй 0 он не уберёт. Как-то так

Добавлено через 25 секунд
Цитата Сообщение от Байт Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
        for (i=0; i<m; i++)
                if (a[i] == 0)
                {
                        for (j=i; j<n-1; j++)
                        {
                                a[j] = a[j+1];
                                
                        }
                        m--;
                        i--;   // Тута!
                }

Не по теме:

раньше меня написал, ну ладно)

 
Текущее время: 11:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru