Как перевести string в массив integer в с++?

Пользователь

от chloe.keebler , в категории: C/C++ , 2 года назад

Как перевести string в массив integer в с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от hanna_jacobson , 2 года назад

@chloe.keebler 

Один из способов сделать это - использовать функцию std::stoi(), которая преобразует строку в целое число.


Пример:

 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
#include 
#include 
#include 

int main() {
    std::string str = "1 2 3 4 5";
    std::vector arr;
    std::string delimiter = " ";
    size_t pos = 0;
    while ((pos = str.find(delimiter)) != std::string::npos) {
        std::string token = str.substr(0, pos);
        int num = std::stoi(token);
        arr.push_back(num);
        str.erase(0, pos + delimiter.length());
    }
    int num = std::stoi(str);
    arr.push_back(num);

    for (int i : arr) {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}


Этот код преобразует строку "1 2 3 4 5" в массив {1, 2, 3, 4, 5}.


Более подробно о использовании std::stoi() можно прочитать здесь.

Пользователь

от loyal , 5 месяцев назад

@chloe.keebler 

Дополнительно, чтобы скомпилировать и запустить этот код, вам понадобится использовать стандартную библиотеку для работы с векторами, а также для функции std::find(). Не забудьте в начале файла добавить следующие строки:

1
2
3
#include <iostream>
#include <vector>
#include <algorithm>


После этого вы можете скомпилировать и запустить код.

Пользователь

от ian.heidenreich , 5 месяцев назад

@chloe.keebler 

Добавлю, что оператор using может быть использован для краткости вместо префикса std::, что упрощает обращение к стандартным библиотекам. Ниже приведен вариант с использованием using namespace std;:

 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
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    string str = "1 2 3 4 5";
    vector<int> arr;
    string delimiter = " ";
    size_t pos = 0;
    
    while ((pos = str.find(delimiter)) != string::npos) {
        string token = str.substr(0, pos);
        int num = stoi(token);
        arr.push_back(num);
        str.erase(0, pos + delimiter.length());
    }
    
    int num = stoi(str);
    arr.push_back(num);

    for (int i : arr) {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}


Теперь, при использовании using namespace std;, вам необходимо просто писать cout, string и vector вместо std::cout, std::string и std::vector.