我需要基于少数其他变量创建文件路径,即字符串。
Deck::Deck() {
char ranks[13] = {'2', '3', '4', '5', '6', '7', '8', '9', '10',
'J', 'Q', 'K', 'A'};
char suits[4] = { 'c', 'd', 'h', 's' };
for (int rank_index = 0; rank_index < 13; rank_index++) {
for (int suit_index = 0; suit_index < 4; suit_index++) {
std::string l_file_name = std::to_string(ranks[rank_index]) +
std::to_string(suits[suit_index]) + ".png";
int l_value = rank_index + 2;
if (ranks[rank_index] == 'J') l_value = 2;
if (ranks[rank_index] == 'Q') l_value = 3;
if (ranks[rank_index] == 'K') l_value = 4;
if (ranks[rank_index] == 'A') l_value = 11;
m_deck.push_back(Card(
ranks[rank_index], suits[suit_index], l_value, l_file_name));
}
}
}
卡构造函数如下所示
Card::Card(char p_rank, char p_suit, int p_value, std::string p_texture_file_name)
:m_rank(p_rank), m_suit(p_suit), m_value(p_value) {
m_texture.loadFromFile(FILE_PATH + p_texture_file_name);
m_shape.setSize((sf::Vector2f(70, 90)));
m_shape.setTexture(&m_texture);
}
和m_deck只是
std::vector<Card> m_deck;
我想实现像这样的字符串,例如Qc.png(俱乐部女王)等,虽然我的字符串中有一些数字
5099.png无法加载图片&#34; res \ cards \ 5099.png&#34;。原因:无法打开文件
例如。它不会将我的字符转换为字符串,而是转换为某些数字。
答案 0 :(得分:3)
您的问题是std::to_string(ranks[rank_index])
。 std::to_string
将数字转换为字符串。 char
可以被认为是一个角色,但它也可以被认为是一个可以容纳至少0-127的小数字。
因此,在典型的ASCII实现中,std::to_string('2')
将返回包含"50"
的字符串。
您需要的是构造一个包含简单字符的字符串。您可以使用:std::string{1, ranks[rank_index]}
(或者您可以使用parens(()
)来执行此操作,但使用花括号可以更清楚地初始化临时内容。)
顺便说一下,我不是使用push_back,而是使用emplace_back:
m_deck.emplace_back(
ranks[rank_index], suits[suit_index], l_value, l_file_name);
它保存了不必要的副本。
答案 1 :(得分:0)
std :: to_string方法将数字类型转换为其对应的字符串,因此您获得的数字是相应字符的ASCII代码。实现您的意图的一种非常直接的方法是使用字符串流来填充字符串:
{{1}}
此外,&#39; 10&#39;是一个多字符常量,它会触发警告并导致意外行为,请参阅this answer about multi-char constansts。您必须选择一个字符来表示该排名。