1

我正在尝试将一个数字(12 位)读取为一个字符串,然后将其复制到一个整数数组中,但没有得到正确的结果。

我的代码在这里:

//header files
#include<iostream>
#include<string>

// namespace 
using namespace std ;

int main ()

{
    string input ;

    do
    {
        cout << "Make sure the number of digits are exactly 12 : ";
        cin >> input ;
    } while((input.length()) != 12 );

    int code[11] ; // array to store the code


    //change string to integer
    int intVal = atoi(input.c_str());


    //
    for (int i = 12; i >= 0 ; i--)
    {
        code[i] = intVal % 10;
        intVal /= 10 ;
        cout << code[i] ;
    }


    cout << endl ;
    //now display code
    for (int i = 0 ; i < 11 ; i++)
    {
        cout << code[i];
    }

    system ("pause") ;
    return 0 ;
}

因此,对于 123456789101 的基本输入,它应该存储在 code[] 数组中。

因此,当我显示代码循环时,我想确保它与 123456789101 相同。

但它来了:

在代码期间

for (int i = 0 ; i < 11 ; i++)
{
cout << code[i];
}

它显示 00021474836 ,我希望它在其中显示我的号码!

4

2 回答 2

3

To turn string to int array, try:

std::string input = "123456789101";
int code[12];

for (int i = 0 ; i < 12 ; i++)
{
  code[i] = input.at(i) - '0';
}

Also intvVal is not big enough to hold 123456789101

于 2013-01-27T00:34:59.163 回答
2

code长度为 11,但您尝试访问for循环中的索引 12 和 11,这两个索引都不存在。其次,12 位数字不适合常规的 32 位整数,对于带符号的 32 位整数,最大值是 2147483647。

Try using atol and storing the value in a uint64_t, and fix your array indices (The length should be 12, and the indices should be 0-11).

于 2013-01-27T00:32:06.807 回答