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

Запись чисел в массив - C++

Восстановить пароль Регистрация
 
Вурдалак
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 5
08.01.2014, 09:07     Запись чисел в массив #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <clocale>
using namespace std;
 
const int SizeMassive = 50;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    char Text [SizeMassive];
    double Srednee [SizeMassive];
 
    cout << "Введите значения" << endl;
    gets(Text); 
}
Есть такой вот код.

Я ввожу например, "1 23 4 567 8"
Подскажите какой должен быть алгоритм, чтобы эти числа записать в массив Srednee[], но не по одной цифре, а так "1", "23", "4", "567", "8".
Условие - использовать цикл и простые функции .

Заранее Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
08.01.2014, 09:15     Запись чисел в массив #2
Используйте int массив.
Ev_Hyper
 Аватар для Ev_Hyper
1808 / 1629 / 435
Регистрация: 15.12.2013
Сообщений: 5,791
08.01.2014, 09:15     Запись чисел в массив #3
C++
1
2
3
4
5
        for (j = 0; j<SizeMassive; j++)
        {
            cout<<"["<<j<<"]";
            cin>>Srednee[j];
        }
Вурдалак
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 5
08.01.2014, 09:22  [ТС]     Запись чисел в массив #4
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
C++
1
2
3
4
5
        for (j = 0; j<SizeMassive; j++)
        {
            cout<<"["<<j<<"]";
            cin>>Srednee[j];
        }
Это самый простой вариант
А мне нужно чтобы пользователь ввел числа через пробел, а программа бы эти числа записала в массив Srednee[].
Ev_Hyper
 Аватар для Ev_Hyper
1808 / 1629 / 435
Регистрация: 15.12.2013
Сообщений: 5,791
08.01.2014, 09:28     Запись чисел в массив #5
тогда вам string понадобиться, а потом его разбивать на элементы по пробелу

Добавлено через 1 минуту
но наверное можно попроще как-то

Добавлено через 3 минуты
Аналог метода Split для std::string
Вурдалак
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 5
08.01.2014, 09:40  [ТС]     Запись чисел в массив #6
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
тогда вам string понадобиться, а потом его разбивать на элементы по пробелу

Добавлено через 1 минуту
но наверное можно попроще как-то

Добавлено через 3 минуты
Аналог метода Split для std::string
Ок. Сейчас попробую
Ev_Hyper
 Аватар для Ev_Hyper
1808 / 1629 / 435
Регистрация: 15.12.2013
Сообщений: 5,791
08.01.2014, 10:23     Запись чисел в массив #7
Хотя, наверное, все же имелось ввиду использование функции
C++
1
atof
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
08.01.2014, 11:15     Запись чисел в массив #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
 #include <algorithm>
 #include <iostream>
 #include <iterator>
 #include <sstream>
 #include <vector>
 
 int main()
 {
     std::vector<int> data;
 
     std::string line;
     std::getline(std::cin, line);
     std::istringstream ss(line);
     std::copy(std::istream_iterator<int>(ss),
               std::istream_iterator<int>(),
               std::back_inserter(data));
 
     
     for (int i = 0; i < data.size(); ++i)
         std::cout << data[i] << " ";
     
     std::cout << std::endl;
 }
Вурдалак
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 5
08.01.2014, 11:17  [ТС]     Запись чисел в массив #9
Цитата Сообщение от fasked Посмотреть сообщение
Самый простой способ, наверное, не будет удовлетворять условиям "использовать цикл и простые функции":
Такое условие дано только для того, чтобы я понимал что делается. Попробую разобрать этот код, что к чему))) Спасибо.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
08.01.2014, 11:24     Запись чисел в массив #10
Цитата Сообщение от Вурдалак Посмотреть сообщение
Такое условие дано только того, чтобы я понимал что делается.
Если так, то вызов алгоритма std::copy можно легко заменить циклом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
     // Считываем строку в переменную line.
     std::string line;
     std::getline(std::cin, line);
 
     // Объект stringstream служит для чтения различных 
     // данных (int, double, etc) из строки.
     // Работает по аналогии с std::cin, но только в качестве
     // источника данных берет строку.
     std::istringstream ss(line);
     int integer = 0;
     while (ss >> integer)
         data.push_back(integer);
Ну и раз уж такое дело, то можно читать и из std::cin, вот только завершением ему будет EOF, а не конец строки:
C++
1
2
3
     int integer = 0;
     while (std::cin >> integer)
         data.push_back(integer);
То есть Вы можете ввести сразу всю строку с числами, и вся строка будет добавлена, но цикл на этом моменте не остановится. Для остановки цикла необходимо, чтобы в поток попало либо не целое число, либо EOF.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
08.01.2014, 11:31     Запись чисел в массив #11
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
#include <iostream>
#include <string>
 
bool isNumberString(char *string);
 
int main()
{
    const size_t stringLength(255);
    char string[stringLength], stringCopy[stringLength];
 
    std::cout << "Input string: ";
    gets_s(string);
    strcpy_s(stringCopy, string);
 
    char *buffer(nullptr);
    char *currentNumber(strtok_s(string, " ", &buffer));
    size_t numbersCounter(0);
    while (currentNumber) {
        numbersCounter += isNumberString(currentNumber) ? 1 : 0;
        currentNumber = strtok_s(0, " ", &buffer);
    }
 
    size_t arrayIndex(0);
    int *array = new int [numbersCounter];
    buffer = nullptr;
    currentNumber = strtok_s(stringCopy, " ", &buffer);
    while (currentNumber) {
        if (isNumberString(currentNumber))
            array[arrayIndex++] = atoi(currentNumber);
        currentNumber = strtok_s(0, " ", &buffer);
    }
 
    std::cout << "Array: ";
    for (size_t i = 0; i < numbersCounter; i++) {
        std::cout << array[i] << ' ';
    }
    std::cout << std::endl;
    delete [] array;
 
    std::system("pause");
    return 0;
}
 
bool isNumberString(char *string)
{
    size_t digitsCounter(0);
    for (size_t i = 0; i < strlen(string); i++) {
        digitsCounter += isdigit(string[i]) ? 1 : 0;
    }
    return digitsCounter == strlen(string);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 11:27     Запись чисел в массив
Еще ссылки по теме:

C++ 2)Дан массив из N целых чисел. Получить из него массив отрицательных чисел и отсортировать его по возрастанию методом выбора
C++ 2)Дан массив из N целых чисел. Получить из него массив отрицательных чисел и отсортировать его по возрастанию методом выбора
C++ чтение чисел из файла и запись в массив

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

Или воспользуйтесь поиском по форуму:
Вурдалак
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 5
13.01.2014, 11:27  [ТС]     Запись чисел в массив #12
Спасибо за вектора! Это вещь! Реально облегчают жизнь. Хоть и долго разбирался и еще надо будет столько же посидеть над ними, но это того стоит!
Yandex
Объявления
13.01.2014, 11:27     Запись чисел в массив
Ответ Создать тему
Опции темы

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