[英]Convert a string into an array of integers
我有一個字符串,該字符串是用空格分隔的整數,我想將其轉換為整數向量數組。 我的字符串是這樣的:
6 9 17 5 3 4 10 12 7 3 5 10 6 5 0 10 10 10 13 3 6 10 2 11 33 9 14 7 0 8 7 6 38 2 23 8 4 52 7 3 19 12 2 22 3 6 3 1 2 1 5 17 13 5 1 6 0 12 6 9 15 2 22 0 27 2 3 4 7 2 8 2 8 6 11 22 4 9 4 1 1 2 2 16 8 3 1 8 0 4 4 2 1 10 24 15 8 2 6 9
如何將其轉換為數組/向量?
使用std::istream_iterator
。 例:
std::vector<int> vector(std::istream_iterator<int>(std::cin), std::istream_iterator<int>());
或者,使用std::string
:
std::string s = "6 9 17 5 3 4 10 12 7 3 5 10 6 5 0 10 10 10 13 3 6 10 2 11 33 9 14 7 0 8 7 6 38 2 23 8 4 52 7 3 19 12 2 22 3 6 3 1 2 1 5 17 13 5 1 6 0 12 6 9 15 2 22 0 27 2 3 4 7 2 8 2 8 6 11 22 4 9 4 1 1 2 2 16 8 3 1 8 0 4 4 2 1 10 24 15 8 2 6 9";
std::stringstream ss(s);
std::vector<int> vec((std::istream_iterator<int>(ss)), (std::istream_iterator<int>()));
以下代碼可滿足您的需求:
std::istringstream iss(my_string);
std::vector<int> v((std::istream_iterator<int>(iss)),
(std::istream_iterator<int>()));
這是帶有所有必需標頭的現成示例
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::string s = "6 9 17 5 3 4 10 12 7 3 5 10 6 5 0 10 10 10 13 3 6 10 2 11 33 9 14 7 0 8 7 6 38 2 23 8 4 52 ";
std::istringstream is( s );
std::vector<int> v;
std::transform( std::istream_iterator<std::string>( is ),
std::istream_iterator<std::string>(),
std::back_inserter( v ),
[]( const std::string &s ) { return ( std::stoi( s ) ); } );
for ( int x : v ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
或者確實可以代替使用算法std :: transform,而僅使用類std :: vector的構造函數,例如,它接受兩個迭代器
std::vector<int> v( ( std::istream_iterator<int>( is ) ),
std::istream_iterator<int>() );
要么
std::vector<int> v( { std::istream_iterator<int>( is ),
std::istream_iterator<int>() } );
我看到了一些更老,更聰明的方法:
#include <stdlib.h> /* strtol */
char *numbers = "6 9 17 5 3 4 10 12 7 3 5 10 6 5 0 10 10 10 13 3 6 10 2 11 33 9 14 7 0 8 7 6 38 2 23 8 4 52 7 3 19 12 2 22 3 6 3 1 2 1 5 17 13 5 1 6 0 12 6 9 15 2 22 0 27 2 3 4 7 2 8 2 8 6 11 22 4 9 4 1 1 2 2 16 8 3 1 8 0 4 4 2 1 10 24 15 8 2 6 9"
long table[512];
char *pt;
int i=0;
pt = numbers;
while(pt != NULL)
table[i++] = strtol (pt,&pt,10);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.