Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取数组第一个元素的镜像?_C++_Arrays_Mirror - Fatal编程技术网

C++ 如何获取数组第一个元素的镜像?

C++ 如何获取数组第一个元素的镜像?,c++,arrays,mirror,C++,Arrays,Mirror,我需要将数字输入一个数组,获取第一个数字,镜像它,然后查看所述数组中的任何其他数字是否与镜像相同 示例:4个数字,123 321 111和200;123的镜像是321,所以它应该告诉我是,因为数组中还有1个元素与镜像相同 包括 使用名称空间std; int main { int n=0,镜像,cnt=0; int*v=新的int[n]; cout>n; forint i=0;i>v[i]; whilev[0]!=0{ 镜像=镜像*10+v[0]%10; v[0]/=10; } cout代码中有两

我需要将数字输入一个数组,获取第一个数字,镜像它,然后查看所述数组中的任何其他数字是否与镜像相同

示例:4个数字,123 321 111和200;123的镜像是321,所以它应该告诉我是,因为数组中还有1个元素与镜像相同

包括 使用名称空间std; int main { int n=0,镜像,cnt=0; int*v=新的int[n]; cout>n; forint i=0;i>v[i]; whilev[0]!=0{ 镜像=镜像*10+v[0]%10; v[0]/=10; }
cout代码中有两个主要问题。首先,您试图在知道用户的输入值n之前分配v数组;这可以通过将v的声明/分配移动到cin>>n;行之后来解决

其次,从不给镜像变量一个初始零值,因此它可以以任何形式开始,然后将数字的值添加到while循环中

下面是代码的固定版本,在更改的行上有注释:

包括 使用名称空间std; int main { int n=0,mirror=0,cnt=0;//必须初始化镜像 cout>n; int*v=new int[n];//只能在输入n的值后分配数组 对于int i=0;i>v[i]; 而v[0]!=0{ 镜像=镜像*10+v[0]%10; v[0]/=10; } cout=1
cout代码中有两个主要问题。首先,您试图在知道用户的输入值n之前分配v数组;这可以通过将v的声明/分配移动到cin>>n;行之后来解决

其次,从不给镜像变量一个初始零值,因此它可以以任何形式开始,然后将数字的值添加到while循环中

下面是代码的固定版本,在更改的行上有注释:

包括 使用名称空间std; int main { int n=0,mirror=0,cnt=0;//必须初始化镜像 cout>n; int*v=new int[n];//只能在输入n的值后分配数组 对于int i=0;i>v[i]; 而v[0]!=0{ 镜像=镜像*10+v[0]%10; v[0]/=10; } cout=1
为什么不使用itoa将每个数字转换为C字符串,然后使用strrev反转字符串,而不是交换整数中的字节?
然后您可以将字符串与strcmp进行比较。代码更少,也更容易理解,更不容易出错。

与其交换整数中的字节,不如使用itoa将每个数字转换为C字符串,然后使用strrev反转字符串?
然后,您可以将字符串与strcmp进行比较。代码更少,也更容易理解,更不容易出错。

打开所有编译器警告,镜像未初始化使用,程序行为未定义。我建议您编写int-getMirrorint-num等函数,这样您就不会在main中塞满所有内容,从而导致出现问题在前面的评论中提到过。@churill我的编译器没有说镜像未初始化,但可能我没有注意。@PaulMcKenzie我不能编写这样的函数,因为我们没有在学校学习过它们,而且我没有足够的实践来熟练使用它们those@PaulMcKenzie甚至更短:int cnt=std::countv+1,v+n,mirror;打开所有编译器警告,mirror未初始化使用,程序行为未定义。我建议您编写int getMirrorint num之类的函数,这样您就不会在main中塞满所有内容,从而导致前面评论中提到的问题。@churill我的编译器没有提到mi错误或未初始化,但可能我没有注意。@PaulMcKenzie我不能编写这样的函数,因为我们没有在学校学习它们,而且我没有足够的实践来熟练使用它们those@PaulMcKenzie更简短的:int cnt=std::countv+1,v+n,mirror;感谢所有的建议,尽管我不明白为什么在其他方面我制作的程序,我把int*v=new int[n]放在了cin>>n之前,它仍然完美地工作着,而且我将尝试实现delete[]从现在开始你给我看的东西,看起来是个好主意:D@MickeyMoise我不知道你说的“其他程序”是什么意思。但是,我相信还有其他一些语言可以使用这种顺序;不过我也不确定。@MickeyMoise我很有信心,它不能完美地工作。分配一个大小为0的数组,并从中写入和读取数据bounds是未定义的行为,因此它可能看起来有效。但它仍然完美地工作-不,它不起作用。你只是幸运而已。@PaulMcKenzie有些人可能会说这是不幸运的!感谢所有的建议,尽管我不明白为什么在我制作的其他程序中,我把int*v=new int[n]在cin之前,它仍然可以完美地工作
从现在开始,我将尝试实现您向我展示的delete[]v,这看起来是个好主意:D@MickeyMoise不知道你说的“其他项目”是什么意思。但是,我相信还有其他一些语言可以实现这种秩序;“不确定,不过。”米奇莫伊斯我很有信心地说,它不可能完美无缺地工作。分配一个大小为0的数组并进行越界写入和读取是一种未定义的行为,因此它似乎可以工作。而且它仍然可以完美地工作-不,它不工作。“你只是幸运而已!”保罗·麦肯齐有些人可能会说那是不幸的!什么是strcmp。我不知道C++中的这个函数。标准C功能什么是strcmp。我不知道C++中的这个函数。标准C函数