gpt4 book ai didi

检查数组是否包含所有元素

转载 作者:行者123 更新时间:2023-11-30 19:28:30 25 4
gpt4 key购买 nike

我编写了一个从 txt.file 读取的代码,将其存储到一个数组中,删除空格,然后将其打印出来。我想添加另一个功能。这次是检查用户是否提供了正确的输入文件。我想将数组 reds 与数组 stringcard 进行比较,看看数组 red 是否包含数组 stringcard 的所有元素。我在网上搜索了一段时间,但不知道如何解决这个问题。

#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#define max 13
#define stringlength 8
const char *stringcard[] = {
"REDA",
"RED2",
"RED3",
"RED4",
"RED5",
"RED6",
"RED7",
"RED8",
"RED9",
"RED10",
"REDJ",
"REDQ",
"REDK",
};
char * removechar(char str[], int ch) {

char * cpos = str;

while ((cpos = strchr(cpos, ch))) {
strcpy(cpos, cpos + 1);
}
return str;
}

int main(int argc, char ** argv) {

char * reds[max];

int i;

FILE * file = argc > 1 ? fopen(argv[1], "r") : stdin;
if (file == NULL)
return 1;
if (argc != 2) {
printf("[ERR]");
return 0;
}

for (i = 0; i < max; i++) {

reds[i] = malloc(stringlength);
fgets(reds[i], stringlength, file);

}

for (i = 0; i < max; i++) {

printf("%s", reds[i]);

}

// removes spaces
for (i = 0; i < max; i++) {

removechar(reds[i], ' ');

}

for (i = 0; i < max; i++) {

printf("%s", reds[i]);

}

int success = 1;
size_t size = sizeof(stringcard)/sizeof(stringcard[0]);
size_t size2 = sizeof(reds)/sizeof(reds[0]);

if(size == size2)
{
for(int i = 0; i<size;i++)
{
if(strcmp(stringcard[i], reds[i]) != 0){
success = 0;
printf("nope");
break;
}
}




}

return 0;

}

输入:

RED A
RED 2
RED 3
RED 4
RED 5
RED 6
RED 7
RED 8
RED 9
RED 10
RED J
RED Q
RED K

最佳答案

这是我的热门评论的序言。

这应该适用于任何顺序的卡片:

size_t size = sizeof(stringcard) / sizeof(stringcard[0]);
size_t size2 = sizeof(reds) / sizeof(reds[0]);

int allmatch = 0;
if (size == size2) {
allmatch = 1;

for (int i = 0; i < size; ++i) {
int curmatch = 0;
const char *curcard = &stringcard[i];

for (int j = 0; j < size; ++j) {
if (strcmp(curcard, reds[j]) == 0) {
curmatch = 1;
break;
}
}

if (! curmatch) {
allmatch = 0;
break;
}
}
}

printf("RESULT: %s\n",allmatch ? "MATCH" : "NOMATCH");
<小时/>

更新:

if we know reds is sorted compare the result of strcmp with -1 or 1 rather than 0 depending on the order of the sorted elements. If stringcard is sorted of course exchange the roles

好吧,如果我们假设 stringcard 始终 已排序[或者我们选择对其进行预排序],我们可以向内部循环添加一个早期转义,这样可以节省失败案例的少量时间:

size_t size = sizeof(stringcard) / sizeof(stringcard[0]);
size_t size2 = sizeof(reds) / sizeof(reds[0]);

int allmatch = 0;
if (size == size2) {
allmatch = 1;

for (int i = 0; i < size; ++i) {
int curmatch = 0;
char *redcard = reds[i];

for (int j = 0; j < size; ++j) {
int cmpflg = strcmp(redcard,stringcard[j]);

if (cmpflg == 0) {
curmatch = 1;
break;
}

if (cmpflg > 0)
break;
}

if (! curmatch) {
allmatch = 0;
break;
}
}
}

printf("RESULT: %s\n",allmatch ? "MATCH" : "NOMATCH");

关于检查数组是否包含所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53889548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com