如何比较数组在C中是否相反?
C语言如何比较数组在C中是否相反?,c,arrays,linux,compare,string-comparison,C,Arrays,Linux,Compare,String Comparison,C语言 我想比较一个数组和它的反向形式,并检查它是否相同 例如,arr1=5 5 8 5 反向arr1=5 5 8 5 5 5 然后输出结果将是:数组反过来是相同的 出于某种原因,当我尝试比较我的两个阵列时,它总是说它是相同的,即使它不是。 例如:输入7 8 9。相反的是9 8 7,这与输入的不同。然而,我的代码说它是 我如何修正比较,使结果准确?请告知,谢谢 我尝试使用goto显示结果。这是我的代码(函数): void函数(int*arr) { 内部j、c、温度、尺寸; 尺寸=尺寸(arr);
我想比较一个数组和它的反向形式,并检查它是否相同 例如,arr1=5 5 8 5
反向arr1=5 5 8 5 5 5 然后输出结果将是:数组反过来是相同的 出于某种原因,当我尝试比较我的两个阵列时,它总是说它是相同的,即使它不是。 例如:输入7 8 9。相反的是9 8 7,这与输入的不同。然而,我的代码说它是 我如何修正比较,使结果准确?请告知,谢谢 我尝试使用goto显示结果。这是我的代码(函数):
void函数(int*arr)
{
内部j、c、温度、尺寸;
尺寸=尺寸(arr);
int old[大小];
int新[大小];
/*从用户输入打印原始数组*/
printf(“输入数组:”);
对于(j=0;j您无法使用sizeof获得数组的大小。您应该打印出size并查看该值给出的值,而不是数组的大小
你总是得到“相同”的原因是你实际上没有比较值。你是在给temp分配arr[j]。if(temp=arr[j])应该是if(temp==arr[j])。我想你会发现它不再是相同的了
解决此问题的更简单方法是:
void checkReverse(int* arr, int arrSize)
{
// Loop through the array until you have hit the middle
for (int i = 0; i < (arrSize - i); i++)
{
// Check the element to the element in the same place counting from the back
if (arr[i] != arr[arrSize - i - 1])
{
// If we find any that don't match, we know it's not the same and can return
printf("Array is NOT the same in reverse.\n");
return;
}
}
// If we made it this far, they are the same
printf("Array is the same in reverse.\n");
return;
}
void checkReverse(int*arr,int arrSize)
{
//在阵列中循环,直到击中中间
对于(int i=0;i<(arrSize-i);i++)
{
//从后面计数时,检查同一位置的元件
如果(arr[i]!=arr[arrSize-i-1])
{
//如果我们发现任何不匹配的,我们知道它是不一样的,可以返回
printf(“数组反过来不一样。\n”);
回来
}
}
//如果我们能做到这一点,他们是一样的
printf(“数组反向相同。\n”);
回来
}
无法使用sizeof获取数组的大小。您应该打印出大小,然后查看该值给您的值,它不会是数组的大小
你总是得到“相同”的原因是你实际上没有比较值。你是在给temp分配arr[j]。if(temp=arr[j])应该是if(temp==arr[j])。我想你会发现它不再是相同的了
解决此问题的更简单方法是:
void checkReverse(int* arr, int arrSize)
{
// Loop through the array until you have hit the middle
for (int i = 0; i < (arrSize - i); i++)
{
// Check the element to the element in the same place counting from the back
if (arr[i] != arr[arrSize - i - 1])
{
// If we find any that don't match, we know it's not the same and can return
printf("Array is NOT the same in reverse.\n");
return;
}
}
// If we made it this far, they are the same
printf("Array is the same in reverse.\n");
return;
}
void checkReverse(int*arr,int arrSize)
{
//在阵列中循环,直到击中中间
对于(int i=0;i<(arrSize-i);i++)
{
//从后面计数时,检查同一位置的元件
如果(arr[i]!=arr[arrSize-i-1])
{
//如果我们发现任何不匹配的,我们知道它是不一样的,可以返回
printf(“数组反过来不一样。\n”);
回来
}
}
//如果我们能做到这一点,他们是一样的
printf(“数组反向相同。\n”);
回来
}
您需要使用以下两点修改代码:
在代码中,size表示数组中的元素数是否正确?因此,要正确计算它,请替换
size=sizeof(arr)/sizeof(int);
sizeof
提供数组占用的内存大小,因此对于三个整数的数组,它提供3*int大小。要计算数组的元素,需要使用sizeof(数组)并将其与数据类型的大小相除
您需要遍历循环并比较原始数组和反向数组的每个元素,以确认它们是否相同
因此,您需要将比较逻辑替换为:
/* Compare original array with reversed array */
for(i=0;i < size;i++)
{
if(new[i] != old[i]){
printf("Array is not the same in reverse\n");
return;
}
}
printf("Array is the same in reverse\n");
return;
/*将原始数组与反向数组进行比较*/
对于(i=0;i
您需要使用以下两点修改代码:
在代码中,size表示数组中的元素数是否正确?因此,要正确计算它,请替换
size=sizeof(arr)/sizeof(int);
sizeof
提供数组占用的内存大小,因此对于三个整数的数组,它提供3*int大小。要计算数组的元素,需要使用sizeof(数组)并将其与数据类型的大小相除
您需要遍历循环并比较原始数组和反向数组的每个元素,以确认它们是否相同
因此,您需要将比较逻辑替换为:
/* Compare original array with reversed array */
for(i=0;i < size;i++)
{
if(new[i] != old[i]){
printf("Array is not the same in reverse\n");
return;
}
}
printf("Array is the same in reverse\n");
return;
/*将原始数组与反向数组进行比较*/
对于(i=0;i
如果要使用递归解决此问题
#include <stdio.h>
int compare(int *arr, int p, int q)
{
/* base case, if we are at or pass the middle point */
if (p >= q)
return 1;
if (arr[p] != arr[q]) {
return 0;
} else {
return compare(arr, p + 1, q - 1);
}
}
int main(int argc, char *argv[])
{
int arr1[] = {5, 5, 8, 8, 5, 5};
size_t array_size = sizeof(arr1) / sizeof(int);
int first = 0;
int last = array_size - 1;
if (compare(arr1, first, last)) {
printf("Array is same in reverse\n");
} else {
printf("Array is not same in reverse\n");
}
return 0;
}
#包括
int比较(int*arr,int p,int q)
{
/*基本情况,如果我们处于或通过中间点*/
如果(p>=q)
返回1;
if(arr[p]!=arr[q]){
返回0;
}否则{
返回比较(arr、p+1、q-1);
}
}
int main(int argc,char*argv[])
{
int arr1[]={5,5,8,8,5,5};
大小数组大小=sizeof(arr1)/sizeof(int);
int first=0;
int last=数组大小-1;
if(比较(arr1、第一个、最后一个)){
printf(“数组反向相同\n”);
}否则{
printf(“数组反向不相同\n”);
}
返回0;
}
如果要使用递归解决此问题
#include <stdio.h>
int compare(int *arr, int p, int q)
{
/* base case, if we are at or pass the middle point */
if (p >= q)
return 1;
if (arr[p] != arr[q]) {
return 0;
} else {
return compare(arr, p + 1, q - 1);
}
}
int main(int argc, char *argv[])
{
int arr1[] = {5, 5, 8, 8, 5, 5};
size_t array_size = sizeof(arr1) / sizeof(int);
int first = 0;
int last = array_size - 1;
if (compare(arr1, first, last)) {
printf("Array is same in reverse\n");
} else {
printf("Array is not same in reverse\n");
}
return 0;
}
#包括
int比较(int*arr,int p,int q)
{
/*基本情况,如果我们处于或通过中间点*/
如果(p>=q)
返回1;
如果(arr[p]!=arr[q]){
返回0;
}否则{
返回比较(arr、p+1、q-1);
}
}
int main(int argc,char*argv[])
{
int arr1[]={5,5,8,8,5,5};
大小数组大小=sizeof(arr1)/sizeof(int);
int first=0;
int last=数组大小-1;
如果(比较