gpt4 book ai didi

C++ 通用 Unicode

转载 作者:行者123 更新时间:2023-11-28 00:16:54 24 4
gpt4 key购买 nike

我有一个简短的问题,但在其他任何地方都找不到答案。基本上我试图制作一个通用函数来返回正确的 unicode(而不是制作文字),如下面的 std::string getUnicode() 函数所示。\xe2\x99\xa 和 cardType 在输出中被视为两个单独的字符串,这会导致“?”后跟 cardType 编号。

在这种情况下:

cout << "\xe2\x99\xa0"; //prints out a symbol, GOOD
cout << "\xe2\x99\xa" << 0; //prints out "?" followed by 0. BAD
cout << card.getUnicode(); //prints out "?" followed by 0. BAD

有什么想法吗? 4-6 个月的 C++ 初学者。

#ifndef CARD_H
#define CARD_H

#include <map>
#include <sstream>
#include <string>

enum CARD_TYPE {SPADE = 0, CLUB = 3, HEART = 5, DIAMOND = 6};

class Card {

private:
int number;
CARD_TYPE cardType;

public:
Card(CARD_TYPE, int);
void displayCard();

int getNumber() {
return number;
}

CARD_TYPE getCardType() {
return cardType;
}

/* Returns Unicode Value for this Card Type */
std::string getUnicode() {
std::stringstream ss;
ss << "\xe2\x99\xa" << cardType;
return ss.str();
}

};

#endif

最佳答案

C++ 标准第 2.14.5 节第 13 段中谈到了这一点:

[Example:

"\xA" "B"

contains the two characters '\xA' and 'B' after concatenation (and not the single hexadecimal character '\xAB'). — end example ]

问题是 '\xa' 被视为单个字符(十六进制值 0xa 是十进制的 10,它映射到 \n (换行符)ASCII/UTF 中的字符)。 cardType 不会“附加”到转义序列。事实上,转义序列是在编译时评估的,而不是在运行时(即评估卡片类型的时间)。

为了让它工作,你需要做类似的事情:

 ss << "\xe2\x99" << static_cast<char>(0xa0 + cardType);

关于C++ 通用 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632929/

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