gpt4 book ai didi

c - C语言中如何比较两个指针的值

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

我的下面的函数总是返回 true。我认为是因为我正在比较指针。我如何比较这些值而不仅仅是指针。

struct Card {
const char *suit;
const char *face;
};

...
struct Card hand[HAND_SIZE];
...

//Determine whether the hand contains a pair.
bool hasPair(struct Card wHand[]) {
bool result = false;
for (unsigned i = 0; i < HAND_SIZE; ++i) {
for (unsigned j = 0; j < HAND_SIZE; ++j) {
if(wHand[i].face == wHand[j].face && wHand[i].suit == wHand[j].suit) {
result = true;
}
}
}
return result;
}

最佳答案

此算法的最大问题是您将卡片与其自身进行比较:您将 ij 都从零开始,因此在配对时会出现误报卡本身。

解决此问题的一个简单方法是在 i+1 处启动 j,确保仅比较不同的卡。

由于将 result 设置为 true 是一条单向街道,因此请考虑在找到匹配项后立即返回 true:

for (unsigned i = 0; i < HAND_SIZE; ++i) {
for (unsigned j = i+1; j < HAND_SIZE; ++j) {
if(wHand[i].face == wHand[j].face && wHand[i].suit == wHand[j].suit) {
return true;
}
}
}
return false;

注意:这假设 facesuit 在同一代码中设置为字符串常量,如果链接多个,这可能会很脆弱对象文件。一个更安全的选择是使用enum来表示面部和西装,并为每个enum值创建一个字符串表示数组:

enum Face {
Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace
};
enum Suit {
Spades, Clubs, Diamonds, Hearts
};
struct Card {
enum Face face;
enum Suit suit;
};

关于c - C语言中如何比较两个指针的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40454291/

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