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
Arrays 如何检查数组中的所有值是否相同?_Arrays_C_If Statement - Fatal编程技术网

Arrays 如何检查数组中的所有值是否相同?

Arrays 如何检查数组中的所有值是否相同?,arrays,c,if-statement,Arrays,C,If Statement,假设我有一个数组short int check[10]={1,1,1,1,1,1,1} 我想检查所有元素是否相同。 我在stackoverflow和google中都找不到答案,但我在C++中遇到了这段代码 bool aresame(int a[], int n) { int i; unordered_map<int, int> m; for (i = 0; i < n; i++) { m[a[i]]++; } i

假设我有一个数组
short int check[10]={1,1,1,1,1,1,1}
我想检查所有元素是否相同。
我在
stackoverflow
google
中都找不到答案,但我在
C++
中遇到了这段代码

bool aresame(int a[], int n)
{
    int i;
    unordered_map<int, int> m;

    for (i = 0; i < n; i++)
    {
        m[a[i]]++;
    }
    if (m.size() == 1)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool arame(int a[],int n)
{
int i;
无序地图m;
对于(i=0;i
调整一点,结果是巨大的错误。
我尝试使用的是
if的
,但这很不专业。
也许你也知道,还有其他方法吗?

正如评论中指出的,使用
if
没有什么不专业的地方。此代码应适用于:

#include <stdbool.h>

bool are_same(int *arr, unsigned int len)
{
    for (int i = 1; i < len; ++i)
        if (arr[0] != arr[i])
            return false;
    return true;
}

如果
很好,那就没有什么不专业的了

我应该注意到在
short int check[10]={1,1,1,1,1,1}
只有9个元素是1,最后一个元素将被初始化为0,因此此检查将始终为
false
,如果忽略大小,即
检查[]={1,1,1…
,则不会出现此问题,因为数组的大小将由初始值设定项中的元素数推断

#include <stdio.h>
#include <stdbool.h>

bool aresame(short int a[], size_t n) // added value to check
{
    for (size_t i = 1; i < n; i++)
    {
        if(a[i] != a[0])
            return false; // if a different value is found return false
    }
    return true; // if it reaches this line, all the values are the same
}

int main()
{
    short int check[]={1,1,1,1,1,1,1,1,1};
    printf("%s", aresame(check, sizeof check / sizeof *check) ? "true" : "false");
}
#包括
#包括
bool arame(短int a[],size\u t n)//要检查的附加值
{
对于(大小i=1;i

如果您不喜欢If语句,请尝试以下操作:

bool aresame(int a[], int n) {
    int i = 0;
    while(i<n && a[i]==a[0]) 
        i++;
    return i == n;
}
bool arame(int a[],int n){
int i=0;

而(为了完整起见,这里有一个递归版本(没有明确的
if
s):

bool arame(int a[],int n){

return(n这里是一个快速而肮脏的
if
-less实现,假设2的补码没有填充位:

#include <stdbool.h>
#include <string.h>

bool are_same(const int *arr, size_t n) {
    return n == 0 || !memcmp(arr, arr + 1, (n - 1) * sizeof(*arr));
}

为什么使用<代码>如果< /Code >不专业?重复数组并检查它是否与第一条条目相符。<代码>为(i=1;IU找到C++代码,但您需要C中的解决方案),那么不要浪费时间与该代码。“遍历每个索引并检查该元素是否与第一个元素相同”?您自己的尝试出了什么问题?如果以非专业的方式使用,则使用
if
是不专业的。如果使用正确,则
if
没有问题。在for循环中使用
if
更“专业”“而不是增加映射的元素。请记住,如果您总是在
if
的一个分支中返回
,那么默认情况下,过去的所有内容都会变成
else
,因此您可以跳过该部分并将其向下折叠一点。
bool aresame(int a[],int n){
    return (n <= 1) || (a[0] == a[n-1] && aresame(a, n-1));
}
#include <stdbool.h>
#include <string.h>

bool are_same(const int *arr, size_t n) {
    return n == 0 || !memcmp(arr, arr + 1, (n - 1) * sizeof(*arr));
}
#include <stdbool.h>
#include <string.h>

bool is_repeating(const int *arr, size_t n, size_t r) {
    return n <= r || !memcmp(arr, arr + r, (n - r) * sizeof(*arr));
}