C程序 - 如何检查数组元素

时间:2016-04-05 03:30:38

标签: c arrays

我有一个函数repsEqual,它接受​​一个数组和整数,如果数组只包含出现在同一个数字中的相同顺序的数字,则返回1。否则返回0.

int repsEqual(int a[], int len, int n)

如果a{3,2,0,5,3}n32053,则返回1,因为该数组仅包含与其所在位置相同的数字位数数字。

如果a{0,3,2,0,5,3}n32053,则返回1;我们可以忽略前导零。

我试过这个

int repsEqual(int a[], int len, int n)
{

    int len = sizeof(a)/sizeof(a[0]);
    //storing elements in array
    for(int i=0;i<len;i++)
    {
        scanf("%d", &a[i]); //eg storing:3 2 0 5 3
    }

    //asking user integer number and storing in next array
    scanf("%d",&a2[num]);//eg 32053

}

现在我需要检查a2元素是否与a1的顺序相同,但不知道如何开始。

3 个答案:

答案 0 :(得分:3)

这就是你想要的

int repsEqual(int a[], int len, int n)
{
    for (int i = 0; i < len; i++)
    {
        if (a[len - i - 1] == n % 10)
            n /= 10;
        else
            return 0;       
    }

    //For cases where your number-length is longer than your array length
    if (n != 0) return 0; 

    return 1;
}

首先你有阵列,比如a[5] = { 5, 2, 3, 1, 4}
基本上我所做的是从头到尾循环数组,那就是a[len - i - 1]
然后我用n n%10的{​​{1}}的最后一个字符检查它 例如,当n = 52314时,第一个 if语句检查是否(52314%10) 4 等于[4] 也是4
if 2个字符匹配,然后循环继续首先删除n的最后一个字符:52314/10 = 5231。 下一个循环将检查5231%10和a [3]
else 循环中断并返回0表示发现了不匹配

终于在检查了数组中的所有字符并且未找到不匹配之后,它将返回1,因为模式匹配

  

注意:一个函数应该只执行其名称所示的内容   在您的情况下,检查数组和整数是否具有相同的模式
  在输入(数组,len和n)后,用户输入应放在其他地方之外,然后传入repsEqual进行检查

答案 1 :(得分:0)

尝试将数字(n)向后与阵列匹配&#39; a&#39;。要做到这一点,你需要通过将剩余部分除以10来模拟来自&#39; n&#39;的最小数字。然后从&#39; n&#39;中删除最小数字。除以10。

int repsEqual(int a[], int len, int n)
{
  int i;
  int temp;
  if (0 == len || NULL == a)
    return 0;  // no array, or elements, doesn't match a real number (n).

  temp = n;
  for (i = len - 1; i >= 0; --i)
  {
    if (a[i] != (temp % 10))
      return 0;  // remainder mismatch against array element.

    temp = temp / 10; // removes the smallest digit.
  }
  return 1;
}

你的n上的模数10得到除以10的余数.IE 452 % 10 = 2。然后除以10,我们删除最小的数字IE 452 / 10 = 45

答案 2 :(得分:0)

这似乎是一些功课,哈哈。无论如何,我给你一个快速/丑陋的样本开始。

#include <stdio.h>

int repsEqual(int a[],int len , int n)
{
    char str[100];
    sprintf(str, "%d", n);
    int i;
    int nonzeroIndex;
    for(i=0; i<len; i++){
        if (a[i] != 0)
            break;
    }
    nonzeroIndex = i;
    printf("nonzeroIndex is %d\n", nonzeroIndex);
    for(i= nonzeroIndex; i <len; i++){
        if (a[i] !=  str[i - nonzeroIndex] - 48) {
            printf("diff at %d\n", i);
            return 0;
        }
    }
    return 1;
}

int main()
{
    int a[5];
    a[0] = 0;
    a[1] = 2;
    a[2] = 0;
    a[3] = 5;
    a[4] = 3;
    int output = repsEqual(a, 5, 2053);
    printf("result: %d\n", output);
}