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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
#1

Построчный числовой ввод данных в массив - C++

11.02.2013, 09:57. Просмотров 1934. Ответов 15
Метки нет (Все метки)

Доброго времени суток!

Пожалуйста, подскажите возможный вариант реализации на c++ следующего алгоритма:

- объявляется массив a[SHORT_INT];
- элементы массива вводятся построчно. После перехода на новую строку выводится индекс последнего введенного элемента, после чего начинается ввод данных в новый массив. Может быть введено любое количество элементов (от 0 до 32768).


Например (код, увы, неработоспособен):

C++
1
2
3
4
5
6
7
8
9
10
11
12
int a[32768],k=0;
for (unsigned short int i=0;i<32768;i++)
{
     do
     {
          cin>>a[k]
          k++;
     }
     while (cin!="\n");
     break;
}
cout<<k; // индекс последнего введенного элемента
Не могу понять, как определить момент, когда выполняется переход на новую строку.

Добавлено через 15 часов 29 минут
Update
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.02.2013, 10:08     Построчный числовой ввод данных в массив #2
я не понял, массив двухмерный чтоли?
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
11.02.2013, 11:42  [ТС]     Построчный числовой ввод данных в массив #3
Tiva, массив не двухмерный.

Объявляется одномерный массив целочисленных элементов (см. представленный код).

Задача определить, когда будет выполнен переход на новую строку, который завершит ввод данных в массив. После этого операцию можно будет повторить над следующим одномерным массивом и т.д.
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
13.02.2013, 11:08  [ТС]     Построчный числовой ввод данных в массив #4
Рассматриваю альтернативное решение. Вначале вводится строка, после чего над ней выполняется необходимый набор действий.

Однако при выводе строки первый символ затирается. По всей видимости виноват символ перехода на новую строку. Справится с ним не удается:

C++
1
2
3
4
5
6
    for (unsigned short int j=0;j<m;j++)
    {
        cin>>s;
        getline(cin,s);
        cout<<s<<endl;
    }
Добавлено через 13 часов 54 минуты
Update
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
13.02.2013, 16:13     Построчный числовой ввод данных в массив #5
Сформулируй понятнее задачу

Цитата Сообщение от VicenteValtiery Посмотреть сообщение
- элементы массива вводятся построчно.
это как через пробел?

1 2 45 67 28 21

потом при нажатии на Enter вводим в массив
числа
a[0] =1;
a[1] = 2;
a[3] =45;
a[4] = 67;
и тд.?

или

вводим числа

22222222222222222222222

нажимаем на Enter
a[0]=22222222222222222222222;
потом вводим:
11111111111
нажимаем на Enter
a[1]=11111111111;
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
13.02.2013, 16:41  [ТС]     Построчный числовой ввод данных в массив #6
anklbenz, вариант 1. Числа вводятся через пробел.
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
13.02.2013, 18:47     Построчный числовой ввод данных в массив #7
на скорую руку топором

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;        
 
int main(){
    int const a_size = 100;
    int a[a_size]={0};   // твой массив целых чисел заполняем нулями
 
      int const str_size = 255; 
     char str[str_size]; // массив символов которые вводит юзер
    
    char temp[10];// временный массив для отделения числа
    int t=0;
    int m=0;
 
    bool empty=true; 
    
    cout<<"Enter Numbers:"<<endl;
    cin.getline(str, str_size);
 
    for(int i=0; i<str_size;i++) // проверяем введенную строку посимвольно
         {
           if(str[i]>='0' && str[i]<='9') //если  символ i строки, которую вводит пользователь, ЧИСЛО
            {
             temp[t]=str[i]; // записываем символ во временный массив
             t++;            
             empty=false;   //временный массив не пустой
            }
             else // если  символ i строки, которую вводит пользователь, НЕ ЧИСЛО
            {
               if(!empty) // и временный массив не пустой
               {
               a[m]=atoi(temp); //atoi - переводит  строку в int
               m++;
              
               for(int j=0; j<10; j++) temp[j]=' '; //отчищаем  временный массив
               t=0;
               empty=true; // вневременный массив пустой
               }
            }
         }
    cout<<endl;
 
// выводим на экран 
for(int i=0;i<a_size;i++)
    if(a[i]!=0)
    cout<<a[i]<<endl;
 
 
cout<<"Last element - "<<m<<endl; // индекс последнего введенного элемента
system("pause>null");
return 0;
 
}
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
13.02.2013, 21:11  [ТС]     Построчный числовой ввод данных в массив #8
anklbenz, спасибо за интересную реализацию! Но у меня не отрабатывает
C++
1
cin.getline(str, str_size);
Сразу же выводится массив нулевой.

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
    int a[100000];
    unsigned short q=0,r=0;
    char str[10000000],temp[10];
    bool empty=true;
        cin.getline(str,10000000);
        for (signed int j=0;j<10000000;j++)
        {
            if ((str[j]>='0' && str[j]<='9') || (str[j]=='-'))
            {
                temp[q]=str[j];
                q++;
                empty=false;
            }
            else
            {
                if(!empty)
                {
                    a[r]=atoi(temp);
                    r++;
                    for (unsigned short int p=0;p<10;p++) temp[p]=' ';
                    q=0;
                    empty=true;
                }
            }
        }
    for (unsigned int i=0;i<10000000;i++)
    {
        if (a[i]!=-858993460) cout<<a[i]<<' ';
    }
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
13.02.2013, 21:14     Построчный числовой ввод данных в массив #9
ты же символы можешь вводить
значит обрабатывается
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
14.02.2013, 10:22  [ТС]     Построчный числовой ввод данных в массив #10
Тут интересная дилемма. Если сохранить тот код, который я опубликовал в своем сообщении, то все работает хорошо.

Но перед getline у меня вводится еще несколько переменных. Тоже через cin. Если этот ввод убрать, то все в порядке. Но если он сохраняется, то getline не срабатывает.

Вот этот код уже не работает. После ввода переменной xxx окно консоли закрывается:

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
    int a[100000],xxx;
    unsigned short q=0,r=0;
    char str[10000000],temp[10];
    bool empty=true;
    cin>>xxx;
        cin.getline(str,10000000);
        for (signed int j=0;j<10000000;j++)
        {
            if ((str[j]>='0' && str[j]<='9') || (str[j]=='-'))
            {
                temp[q]=str[j];
                q++;
                empty=false;
            }
            else
            {
                if(!empty)
                {
                    a[r]=atoi(temp);
                    r++;
                    for (unsigned short int p=0;p<10;p++) temp[p]=' ';
                    q=0;
                    empty=true;
                }
            }
        }
    for (unsigned int i=0;i<100000;i++)
    {
        if (a[i]!=-858993460) cout<<a[i]<<' ';
    }
Добавлено через 13 часов 2 минуты
Update
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
14.02.2013, 16:19     Построчный числовой ввод данных в массив #11
C++
1
2
3
4
5
6
после 
cin>>xxx;
поставь
cin.get();
потом и используй свои
cin.getline
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
14.02.2013, 19:14  [ТС]     Построчный числовой ввод данных в массив #12
Спасибо! Все отлично работает! Очень помогли!
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
14.02.2013, 19:17     Построчный числовой ввод данных в массив #13
Красивее можно.
C++
1
2
3
4
5
6
7
8
9
10
11
string s;
int a[100] = {}, n = 0;
 
while (getline(cin, s))
{
  istringstream iss (s, istringstream::in);
  int t;
 
  while (iss >> t)
    a[n++] = t;
}
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
14.02.2013, 19:36  [ТС]     Построчный числовой ввод данных в массив #14
Очень здорово у Вас получилось! Буду пробовать работать с этим решением! Единственное, что не удается - это остановить процесс ввода. После нажатие Enter все равно продолжается ввод данных в массив.
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
14.02.2013, 20:42     Построчный числовой ввод данных в массив #15
VicenteValtiery, введите Ctrl-Z, это символ конца ввода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2013, 10:32     Построчный числовой ввод данных в массив
Еще ссылки по теме:
Ввод с клавиатуры данных в массив C++
C++ Ввод данных в двумерный динамический массив
Ввод данных из файла в двумерный массив C++
C++ Ввод данных в динамический массив структур
C++ Ввод данных в динамический массив из файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
VicenteValtiery
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 19
15.02.2013, 10:32  [ТС]     Построчный числовой ввод данных в массив #16
Спасибо!!
Yandex
Объявления
15.02.2013, 10:32     Построчный числовой ввод данных в массив
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru