【发布时间】:2019-08-03 17:40:50
【问题描述】:
我已经开始用 C 语言做一个纸牌游戏,但我找不到任何东西,而不是 string,这显然没有在 C 语言中使用。下面是一些代码,这会成为一个障碍:
struct cards {
string index;
string colour;
};
void load_cards(cards deck[MAX_C])
{
int i = 0;
for (int j = 0; j < 4; j++) {
deck[i].index = '2';
deck[i += 1].index = "3";
deck[i += 1].index = "4";
deck[i += 1].index = "5";
deck[i += 1].index = "6";
deck[i += 1].index = "7";
deck[i += 1].index = "8";
deck[i += 1].index = "9";
deck[i += 1].index = "10";
deck[i += 1].index = "W";
deck[i += 1].index = "D";
deck[i += 1].index = "K";
deck[i += 1].index = "A";
}
for (int j = 0; j < 13; j++) {
deck[j].colour = "T";
}
for (int j = 13; j < 26; j++) {
deck[j].colour = "k";
}
for (int j = 26; j < 39; j++) {
deck[j].colour = "K";
}
for (int j = 39; j < 52; j++) {
deck[j].colour = "P";
}
for (int j = 52; j < 56; j++) {
deck[j].colour = "JR";
}
}
【问题讨论】:
-
std::string只是char*的一个包装器(这当然是简化的),它会自动分配和释放。您可以使用char*并手动进行内存管理。 -
如果您只使用诸如“JR”之类的字符串文字,您也许可以使用
const char *。必须看看你如何使用字符串才能确定。在你走得太远之前,请确保将 C++ 移植到 C 是有意义的。 C 和 C++ 之间存在相当多的意识形态差异,这可能会使直接移植的工作量超过其价值,或者使 C 程序效率低得可怜。 -
Wile @Lorand 是对的,这部分(这当然是简化的)非常重要。您首先必须了解指针和内存分配。这是一个棘手的话题。这里无法解释。 Lorand,添加此警告后,您的评论可以作为答案。 “具体怎么样?”过于宽泛和/或要求提供教程,即离题。
-
我想知道为什么还没有人建议使用
enum,即使在 C++ 中也是一个更好的选择。 -
完全不同的是,对于一副纸牌,您不需要像
string类型的C++!