C++ 如何在C++;还是将C转换为整数数组?

C++ 如何在C++;还是将C转换为整数数组?,c++,c,C++,C,如何将字符串转换为整数数组?我可以使用sstream,因为atoi不工作吗 您希望转换工作如何进行? 您只是想要一个包含数组中每个字符的ASCII值的数组吗?(所以“abc”变成了[97,98,99,0]) 还是要以某种方式解析字符串?(“1,2,3”成为数组[1,2,3]) 在第一种情况下,C++中,我会做这样的事情:< /P> struct convert { int operator()(char c) { return static_cast<int>(c);

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

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

还是要以某种方式解析字符串?(“1,2,3”成为数组[1,2,3])

在第一种情况下,C++中,我会做这样的事情:< /P>
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())
struct转换{
int运算符()(字符c){
返回静态_-cast(c);
}
};
std::string str=“hello world”;
std::向量结果;
std::transform(str.begin()、str.end()、std::back\u插入器(result)、convert())
当然,您可以使用原始数组而不是向量,但是由于字符串的长度可能是可变的,因此数组只是在自找麻烦


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

正如您在评论中所说,您得到了一个二进制字符串,您希望将其转换为整数。使用位集:

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);
}
在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可以解析它们

快速字符串拆分器例程:

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));
}

如果你把我的和jalf的代码结合起来,你会得到非常好的结果。

据我所知,输入字符串“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;
}
string a=“1110011000”;
向量v;
对于(int i=0;i不能将istream_迭代器与字符串流结合使用

通过数组,我假设您实际上指的是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,",")
             );
}
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
std::string data=“5 6 7 8 9”;
std::向量存储;
std::stringstream数据流(数据);
std::copy(std::istream_迭代器(数据流),
std::istream_迭代器(),
标准::背面插入器(商店)
);
//此行只是将存储复制到std::cout
//验证它是否有效。
std::copy(store.begin(),
store.end(),
std::ostream_迭代器(std::cout,“,”)
);
}
语言:C

标题:

#include <stdlib.h>
用法示例:

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

我想你应该给出一些所需输入/输出的例子,让它更清晰。假设der是一个110011000号,存储在字符串中,我想将它存储在向量数组中!!作为数字如何做你想把二进制Sting转换成整数?所以向量的元素应该是{1,1,0,0,1,1,0,0,0}?kasperasky,我想你应该更精确地阐述你想要的。我很确定我告诉你的不是你想要的:pPost::dynamic\u位集如果是可变长度的话,std::位集会解决这个问题。读取时它会在第一个空格处停止。虽然你必须给出一个最大宽度。但他无论如何都想转换成整数。所以我认为将其设置为sizeof(long)*CHAR_位就可以了。虽然这对于有经验的C程序员来说是显而易见的,但我可能会指出,“技巧”是一个[i]-'0'。它依赖于数字的ASCII表示彼此相邻,因此'0'不是0,但它总是比'1'小1'
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
strtol(nptr, (char **) NULL, 10);