将char 2d数组转换为int 2d数组

时间:2019-07-08 18:36:43

标签: c++

我正在尝试将2D数组的char转换为2D数组的int以便可以获取每个字符的ASCII值,但是每当我打印输出时,我都会以16进制输出,但是当我尝试将该十六进制转换为ASCII值不等于任何ASCII值

build/index.html

我接受输出65,但是我得到的输出是0x7ffee224f940。 我输入的是A

4 个答案:

答案 0 :(得分:2)

您正在尝试打印整数数组。您获得的十六进制输出是数组的地址,而不是内容。如果要获取单个字符的值,则应一张一张打印。

答案 1 :(得分:1)

您的代码有两个主要问题。

第一部分是这里:

    int n;
    cout<<"Enter input"<<endl;
    cin>>n;
    char a [n][50];
    int arr [n][50];

由于n在编译时未知,因此char a [n][50];int arr [n][50];是您不应该做的两件事。一些编译器可能会让您难以理解,但是通常,数组声明需要提前知道大小。有关如何正确执行此操作的一些示例,see the answers to this question

问题2:

arr[i][50]=a[i][50];

您正在这里做的另一件非常糟糕的事情。 Array subscripts are 0 based,这意味着在您的示例中,没有arr[i][50]这样的东西。最后一个是arr[i][49]。链接的问题给出了一些很好的理由,为什么它基于0,所以我不再赘述。只需知道,由于数组的第一个元素始于arr[i][0],因此实际上您必须比原始大小少访问1来获取数组的最后一个元素。

不遵守这些准则至少会导致意外的结果,最糟糕的是会崩溃,如您所知。

答案 2 :(得分:1)

尽管有些编译器支持其自己的语言扩展,但是可变长度数组

cin>>n;
char a [n][50];
int arr [n][50];

不是标准的C ++功能。因此,相反,最好使用标准容器std::vector

在此声明中似乎

arr[i][50]=a[i][50];

您正在尝试将一个数组分配给另一个数组。除了表达式之外,不正确的数组没有赋值运算符。

下面是一个演示程序,显示了如何执行任务。

#include <iostream>
#include <string>
#include <limits>
#include <array>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstring>

int main() 
{
    const size_t N = 50;

    std::cout << "Enter the number of strings: ";

    size_t n;

    std::cin >> n;

    std::vector<std::array<char, N>> strings( n );
    std::vector<std::array<int, N>> values( n );

    std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

    for ( size_t i = 0; i < strings.size(); i++ )
    {
        std::cin.getline( strings[i].data(), N, '\n' );
    }

    for ( size_t i = 0; i < strings.size(); i++ )
    {
        std::cout << strings[i].data() << '\n';
    }

    for ( size_t i = 0; i < strings.size(); i++ )
    {
        size_t len = std::strlen( strings[i].data() ) + 1;
        std::copy( strings[i].data(), strings[i].data() + len, std::begin( values[i] ) );       
    }

    for ( const auto &row : values )
    {
        for ( auto it = std::begin( row ); *it != 0; ++it )
        {
            std::cout << *it << ' ';
        }
        std::cout << '\n';
    }

    return 0;
}

程序输出可能如下所示

Enter the number of strings: 2
Hello
World
72 101 108 108 111 
87 111 114 108 100 

答案 3 :(得分:0)

让我们逐步研究您的代码:

  1. 要输入二维数组,您需要二维,即通常使用两个变量来定义数组中的单个元素。因此,需要嵌套的for循环,一个for循环就足够了。

    < / li>
  2. 数组索引从0开始,因此数组的最后一个元素只能是n-1,在这里50-1 = 49。因此,指向索引为50的可变位置也是错误的。

  3. 赋值arr [i] [j] = a [i] [j]是正确的,足以将字符转换为整数。

因此更新了代码:

#include <iostream>
using namespace std;
int main() 
{
    int n;
    cout<<"Enter input"<<endl;
    cin>>n;

    //The 50 in the second parameter, implies that the column width will always be 50
    char a[n][50];
    int arr[n][50];

    for(int i=0;i<n;i++)
    {
        for(j=0;j<50;j++)
        {
            cin>>a[i][j];
            //Direct assignment to obtain the ascii value
            arr[i][j]=int(a[i][j]);
        }
    }


    for(int i=0;i<n;i++)
    {
        for(j=0;j<50;j++)
        {
            cout<<arr[i];
            cout<<endl;
        }
    }

return 0;
}

您可以了解有关2D阵列here

的更多信息

<-如果有帮助则进行投票->