C ++数组:包含类型的转换

时间:2008-11-12 14:03:53

标签: c++ arrays

在C ++中将固定长度字符串数组转换为固定长度整数数组的最佳方法是什么?

5 个答案:

答案 0 :(得分:10)

这会将一个字符数组复制到一个int数组中:

#include <algorithm>
char foo[9] = "asdfasdf";
int bar[9];
std::copy(foo, foo+9, bar);

std::copy

这将指定空终止字符数组{'a','s','d','f','a','s','d','f','\ 0'的值}到一个整数数组,产生{97,115,100,102,97,115,100,102,0}。请注意,这包括原始字符串的空终止。


这将解析一个字符串数组,并将它们的整数值放入一个int数组中:

#include <algorithm>
#include <sstream>
#include <string>

template <class T>
T parse(const std::string& str)
{
    T temp;
    std::istringstream iss(str);
    iss >> temp;
    if(iss.bad() || iss.fail())
    {
        // handle conversion failure
    }
    return temp;
}

...

std::string foo[3];
int bar[3];
foo[0] = "67";
foo[1] = "11";
foo[2] = "42";

std::transform(foo, foo+3, bar, parse<int>);

std::transform

这会将数组foo中的每个字符串转换为整数,并将它们放在整数数组中。吧。

答案 1 :(得分:6)

#include <algorithm>

std::string foo[9];
int bar[9];

std::transform(foo, foo+9, bar, MyMagicStringToIntFunction);

MyMagicStringToIntFunction是您希望用于将字符串转换为整数的函数。既然你没有说明你想要怎么做,我就无法回答那个部分。

这是我对你想做什么的猜测,但更多的信息会有所帮助。 (“字符串数组是指一个std :: strings数组?你想如何执行转换?”

无论如何,std :: transform是我最好的,但你必须自己填补空白。

答案 2 :(得分:2)

string array - &gt; int数组

循环遍历字符串数组,并使用std::istringstream

将每个字符串连续转换为相应的整数
std::size_t const N = 3;
std::string a[N] = { "10", "-2", "5" };
int b[N];

for(std::size_t i = 0; i < N; i++) {
    std::istringstream sstream(a[i]);
    sstream >> b[i];
}

如果你有很多值,字符串流的不断重新创建会带来很大的开销。你可以把它带出循环。

std::stringstream sstream;
for(std::size_t i = 0; i < N; i++) {
    sstream << a[i];
    sstream >> b[i];
    sstream.clear(); 
    sstream.seekp(0); sstream.seekg(0);
}

char数组 - &gt; int数组

如果要将char数组a转换为int数组b,可以这样做:

std::size_t const N = 15;
char a[N] = { "this is a test" };
int b[N];

for(std::size_t i = 0; i < N; i++)
    b[i] = (int)(unsigned char) a[i];

转换为unsigned char使得int数组的值为正(如果要转换扩展的8位字符,将在有符号的8位字符类型中表示为负数,则会很有用,否则将为负整数太)。如果你不想要这个行为,你可以安全地省略该演员。

答案 3 :(得分:0)

如果你想使用向量而不是数组,这可能会给你一些想法。

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <ostream>
#include <algorithm>
#include <sstream>
using namespace std;

int int_from_string(const string& s) {
    istringstream ss(s);
    int i;
    ss >> i;
    return i;
}

vector<int> int_vec_from_string_vec(const vector<string>& vstr) {
    vector<int> v(vstr.size());
    transform(vstr.begin(), vstr.end(), v.begin(), int_from_string);
    return v;
}

int main() {
    const vector<string> vstr(3, "45");
    const vector<int> vint = int_vec_from_string_vec(vstr);
    copy(vint.begin(), vint.end(), ostream_iterator<int>(cout, "\n"));
}

答案 4 :(得分:0)

如果要将字节数组分解为整数数组,可以通过char进行char:

char foo[10];
int bar[10];

for(int i = 0; i < 10; ++i) {
  bar[i] = (int)foo[i];
}

但我猜这不是你想要的......