我正在尝试将2D数组的char转换为2D数组的int以便可以获取每个字符的ASCII值,但是每当我打印输出时,我都会以16进制输出,但是当我尝试将该十六进制转换为ASCII值不等于任何ASCII值
build/index.html
我接受输出65,但是我得到的输出是0x7ffee224f940。 我输入的是A
答案 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)
让我们逐步研究您的代码:
要输入二维数组,您需要二维,即通常使用两个变量来定义数组中的单个元素。因此,需要嵌套的for循环,一个for循环就足够了。
< / li>数组索引从0开始,因此数组的最后一个元素只能是n-1,在这里50-1 = 49。因此,指向索引为50的可变位置也是错误的。
赋值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
的更多信息<-如果有帮助则进行投票->