如何将C ++或C中的字符串转换为整数数组?

时间:2008-12-31 18:10:13

标签: c++ c

如何将字符串转换为整数数组?我可以使用sstream,因为atoi不起作用吗?!

6 个答案:

答案 0 :(得分:4)

正如您在评论中所说,您有一个二进制字符串,并且您希望将其转换为整数。使用bitset:

std::istringstream is(str);
std::bitset<32> bits; // assuming each num is 32 bits long

while(is >> bits) {
    unsigned long number = bits.to_ulong();
    // now, do whatever you want with that long.
    v.push_back(number);
}

如果您在该字符串str中只有一个二进制数,则可以使用

unsigned long number = std::bitset<32>(str).to_ulong();

也可以在C中转换...

long value;
char const *c = str;
for(;;) {
    char * endp;
    value = strtol(c, &endp, 2);
    if(endp == c)
        break;

    /* huh, no vector in C. You gotta print it out maybe */
    printf("%d\n", value);
    c = endp;
}

atoi无法解析二进制数。但如果你告诉它正确的基础,strtol可以解析它们。

答案 1 :(得分:3)

您希望转换工作到底如何? 你只是想要一个包含数组中每个字符的ASCII值的数组吗? (所以“abc”变成[97,98,99,0])?

或者你想以某种方式解析字符串? (“1,2,3”成为数组[1,2,3])

在第一种情况下,在C ++中,我会做这样的事情:

struct convert {
  int operator()(char c) {
    return static_cast<int>(c);
  }
};

std::string str = "hello world";
std::vector<int> result;
std::transform(str.begin(), str.end(), std::back_inserter(result), convert())

当然你可以使用原始数组而不是向量,但由于字符串的长度可能是变量,然后数组只是要求麻烦。

如果这不是您想要的,您可能希望将问题编辑为更具体。

答案 2 :(得分:1)

据我所知,输入字符串“110013”将转换为数组{1,1,0,0,1,3}。以下是如何在C ++中执行此操作:

string a = "1110011000";
vector<int> v;
for(int i = 0 ; i < a.length() ; i++){
    v.push_back(a[i] -'0');
}

// Check the result
for(int i = 0 ; i < v.size() ; i++){
    cout << v[i] << endl;
}

答案 3 :(得分:0)

快速字符串分割程序例程:

convert(string str, string delim, vector<int>& results)
{
  int next;
  char buf[20];
  while( (next= str.find_first_of(delim)) != str.npos ) {
    if (next> 0) 
      results.push_back(atoi(str.substr(0,next), buf, 10));
    str = str.substr(next+1);
  }
  if(str.length() > 0)
    results.push_back(atoi(str.substr(0,next), buf, 10));
}

你可以使用stringstream而不是atoi(它确实可以在一个int上运行)

int i;
stringstream s (input_string)
s >> i;

如果你结合我和jalf的代码,你会得到非常好的东西。

答案 4 :(得分:0)

将istream_iterator与字符串流结合使用。

By Array我假设你真的是指一个std :: vector,因为你不知道编译时整数的数量。但是代码可以很容易地修改为使用数组而不是矢量。

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
    std::string     data = "5 6 7 8 9";
    std::vector<int>    store;


    std::stringstream   dataStream(data);
    std::copy(std::istream_iterator<int>(dataStream),
              std::istream_iterator<int>(),
              std::back_inserter(store)
             );

    // This line just copies the store to the std::cout
    // To verify it worked.
    std::copy(store.begin(),
              store.end(),
              std::ostream_iterator<int>(std::cout,",")
             );
}

答案 5 :(得分:0)

语言:C

标题:

#include <stdlib.h>

功能原型:

long int strtol(const char *nptr, char **endptr, int base);

示例用法:

strtol(nptr, (char **) NULL, 10);