0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
1

Массив на вход одной строкой

22.04.2018, 17:30. Показов 2442. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане)
Задача следующая: надо строку, подающуюся на вход из 300 чисел, разделенных пробелами, записать в целочисленный массив.
Битый час не могу решить ее, подскажите, пожалуйста решение)
Мои попытки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int min = 0; int max = 0;
    char x; int j = 0; int k = 0;
    int array[300];
    string str;
    getline(cin, str);
    for (int i = 0; i < str.length(); i++){
        if (str[i]!= ' ') array[j++] = (int)str[i];
       /* cin >> x;
        if (isdigit(x))
            array[j++]=x - '0';
        if(x==' ')continue;*/
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2018, 17:30
Ответы с готовыми решениями:

Двумерный массив одной строкой.
Здравствуйте. Вот такая программа: На основе исходных массивов A и B (n и m – рабочие размеры...

Как скопировать массив в вектор одной строкой без использования циклов и алгоритмов STL?
Уважаемые формучане, не подскажете, как скопировать массив в вектор одной строкой без использования...

Прочитать одной строкой с файла
собственно в этом и вопрос, как считать целой строкой #include &lt;iostream&gt; #include &lt;iomanip&gt;...

Ввод одномерного массива одной строкой
Получил в универе задание где в одной из его частей указано, что нужно ввести размер и елементы...

7
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
22.04.2018, 17:31 2
C++
1
2
3
4
int m[300];
 
for (int i = 0; i < 300; ++i)
    cin >> m[i];
0
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
22.04.2018, 17:33 3
На примере 10 чисел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <sstream>
 
int main()
{
    const int n = 10;
    int a[n];
    std::string s = "1 2 3 4 5 6 7 8 9 10";
    std::stringstream ss(s);
    for (int i = 0; i < n; i++) {
        ss >> a[i];
        std::cout << a[i] << " ";
    }
}
1
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
22.04.2018, 19:06  [ТС] 4
Это, конечно, хороший вариант, но возможно ли решение моей задачи без использования stringstream?
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
22.04.2018, 19:16 5
Можно. Я написал. Подавайте строку на вход из 300 чисел, разделенных пробелами, будет работать.
Если не с клавиатуры строка подается, возможны варианты. Через std::stringstream, через strtol, через strtok.
0
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
22.04.2018, 19:25  [ТС] 6
Вот такая строка подается на вход)
Не с клавиатуры)
Миниатюры
Массив на вход одной строкой  
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
22.04.2018, 20:20 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
#include <iostream>
#include <string>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    const int n = 10;
    int m[n];
    string s = "1 2 3 4 5 6 7 8 9 10";
    char* ptr = &s[0];
    
    for (int i = 0; i < n; ++i)
        m[i] = strtol(ptr, &ptr, 10);
    
    for (int i = 0; i < n; ++i)
        cout << m[i] << ' ';
 
    cout << endl;
 
    system("pause");
    return 0;
}
1
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,199
22.04.2018, 21:31 8
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
56
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
 {
    string s="62056 -45678 -32023 12345",t;
    size_t i=0;
    int m[4]={0},j=0;
 
    while(s[i]!='\0' )
      {
         if(s[i]==' ' )
           {
             i++;
             int x=1;
             for(int k=t.length()-1;k>=0;k--)
               {
                  if(t[k]!='-')
                    {
                      m[j]+=(t[k]-'0')*x;
                      x*=10;
                    }
               }
             if(t[0]=='-')
             m[j]*=-1;
             j++;
             t="";
           }
        if(i==s.length()-1)
          {
            t+=s[s.length()-1];
            int x=1;
            for(int k=t.length()-1;k>=0;k--)
              {
                if(t[k]!='-')
                  {
                     m[j]+=(t[k]-'0')*x;
                    x*=10;
                  }
               }
            if(t[0]=='-')
            m[j]*=-1;
          }
        t+=s[i];
        i++;
      }
      for(int j=0;j<4;j++)
        cout<<m[j]<<"\n";
 
 
 
    system("PAUSE");
    return 0;
}
1
22.04.2018, 21:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2018, 21:31
Помогаю со студенческими работами здесь

Почему распечатка не заканчивается одной строкой?
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(int...

Ввод/вычисление/вывод одной программной строкой
Здравствуйте) Есть вопрос, можно ли сделать по функционалу вот это: cin&gt;&gt;p; p*=p; cout&lt;&lt;p;...

Не могу разобраться с одной строкой кода (cout.precision)
Всего один маленький вопросик. Что делает вот эта строка cout.precision(3); ???? 1) Вычислить и...

Ввод данных в массив одной строкой
Я обычный школьник, каких полно в интернетах. Отправляют на районную олимпиаду по информатике, на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru