如何将101011010分别存储到阵列?

时间:2016-02-17 07:42:54

标签: c++ arrays

例如

如果我输入的数字如101011010

  

输入

     

101011010

我想将数字存储到如下所示的数组

  

结果]

     

array [0] = 1 array [1] = 0 array [2] = 1 array [3] = 0 array [4] = 1
  array [5] = 1 ...

我知道如何声明数组或for循环。似乎有某种形式 可以帮助我在C ++库中的函数.. =(

1 个答案:

答案 0 :(得分:2)

将包含数字的字符转换为实际数字的最简单方法是在其他响应中已经提到的方法:

char ch = '3';
int number = ch - '0';

这是有效的,因为数字字符在ASCII表中具有连续的代码。

如果你有一个包含数字的字符串,并且想要将所有这些数字提取到数组中,那么你有几个选项,具体取决于你实际想要使用/学习的C ++数量。

使用C样式数组

std::string str = "101011010";

// you must be sure somehow that the array is big enough
int arr[100] = { 0 };
for(std::string::size_type i = 0; i < str.size(); ++i)
{
    arr[i] = str[i] - '0';        
}

您必须正确管理该C风格数组的大小。

实际上开始使用C ++而不仅仅是C

std::vector<int> arr (str.size());
for(std::string::size_type i = 0; i < str.size(); ++i)
{
    arr[i] = str[i] - '0';
}

std::vector更容易使用,在编译时你不必知道它的(最大)大小。

更多C ++,甚至一些C ++ 11

std::vector<int> arr (str.size());

std::transform(str.begin(), str.end(), arr.begin(), 
            [](std::string::value_type ch) { return (ch - '0'); });

更多C ++ 11和编译时数组大小,以防你从1错过它。

std::array<int, 16> arr;

std::transform(str.begin(), str.end(), arr.begin(), 
            [](std::string::value_type ch) { return (ch - '0'); });

与第一种情况一样,数组的大小为constexpr,因此您必须知道字符串的最大长度,并注意不要写入超过数组大小的内容。与C样式数组不同,std::array有一个方法at(),如果您尝试访问数组大小之外的元素,它会检查并抛出异常。