检查数组是否有相同的数字及其值

时间:2016-01-27 11:59:57

标签: c arrays pointers

作为我必须编写的程序的一部分,我需要编程的函数之一应检查数组是否具有相同的相同数字,并且如果其中一个更大/等于给定数字

给定的数字也是数组中的数字量

这是我到目前为止所做的:

int checkarray(int *arr, int num)
{
    int check = num;
    int check2 = num;
    int *lor;
    int *poi;
    int *another;

    another = arr;
    lor = arr;
    poi = arr;
    int check3 = num;

    for ( ; num > 1; num--) {

        for ( ; check3 >= 0; check3--) {

            if (*arr == *poi)
                return 0;
            poi++;
        }
        arr++;
        poi = another;
    }

    for ( ; check2 > 0; check2--) {

        if (*lor >= check)
            return 0;
        lor++;
    }
    return 1;
}

我知道我为函数制作了太多的指针/ int,但这不是问题..

检查给定值的部分可以正常工作,如果我没有弄错,所以我认为你可以忽略那部分(那是最后'for'循环)

我知道它应该很容易,但由于某些原因我无法让它工作......

编辑:

我举一个例子:如果数组是0 1 2 3 1,该函数将返回0,因为第二个和最后一个数字是相同的。如果给定的数字是5,则该函数也将返回0,其中一个数字大于或等于5,例如0 1 2 5 4。

否则,该函数返回1.

3 个答案:

答案 0 :(得分:2)

我创建了一个新数组,我将保存数字,以便检查数组中是否有重复数字。我在函数中还有一个参数来知道数组的大小。

#include <stdio.h>
#include <stdlib.h>

int checkArray(int *arr, int size, int number){
    int i,j;
    int *countArray = calloc(size,sizeof(int));
    for(i=0;i<size;i++){
        if(arr[i]>=number){  //Check >= number
            free(countArray);
            return 0;
        }
        for(j=0;j<i;j++){ //Check repeat number
            if(countArray[j]==arr[i]){
                free(countArray);
                return 0;
            }
        }
        countArray[j]=arr[i]; //no repeat number so we save it.
    }

    free(countArray);
    return -1; //Error

}

int main(){
  int arr[6] = {0,8,2,3,4,1};
  printf("Result %d",checkArray(arr,6,5));

}

我希望这可以帮到你。

没有新阵列的更新

int checkArray(int *arr, int size, int number){
    int i,j;
    for(i=0;i<size;i++){
        if(arr[i]>=number){
            return 0;
        }
        for(j=0;j<i;j++){
            if(arr[i]==arr[j]){
                return 0;
            }
        }
    }    
    return -1; //Error    
}

答案 1 :(得分:1)

将您的上限for循环更改为:

  for ( ; num > 0; num--) {
     if(arr[i]>=number){
         return 0;
      }
        int check3 = num;
        poi=arr+1;
        for ( ; check3 > 0; check3--) {
            if (*arr == *poi)
                return 0;
            poi++;
        }
        arr++;
    }

并删除底部。

答案 2 :(得分:0)

这里的错误如下:

1-您需要更改行:

int check3 = num;
for ( ; num > 1; num--) {

是:

for ( ; num > 1; num --) { 
    int check3 = check; // Move to inside loop to reset each time for a fresh inner loop and use check instead of num to reset the value

2-你需要更改一行:

for ( ; check3 >= 0; check3--) {

for ( ; check3 > 0; check3--) { // Because `>=0` means attempting to read past the array

3- poi应该在循环中每次初始化为arr+1,以跳过将数组的相同成员与自身进行比较,并跳过多次重新比较成员。

我建议使用更好的代码样式重写该方法,以便更容易检测到此类错误和拼写错误