我正在尝试解析每个字符的字符串字符,以便根据每个字母加载图像。因此,如果文本是“你好”,我将打印5个相同字母但在photoshop中制作的图像。 它工作正常,直到我想解析€符号。
std::string al = "Test €";
std::string letter="";
for (int i=0; i< al.length();++i)
{
if (al[i]=='.') letter ="dot";
else if (al[i]==',') letter ="coma";
else if (al[i]==' ') letter ="space";
//else if (al[i]=='€') letter ="euro";
else letter=al[i];
}
这样可以正常工作:letter
会获取值:"T","e","s","t","space"
但如果我取消注释else if (al[i]=='€') letter ="euro";
并尝试构建它,那么我会收到一条红色消息错误,上面写着:
warning: multi-character character constant
所以问题是我需要知道al [i]是否能够将“euro”分配给字母(然后我的代码将能够使用它)
我在google上搜索,发现link表示"\u20AC"
是€的c ++代码,我想这个符号可能需要超过一个字节,但仍然不能找到如何处理它并能够在我的代码中解析它。我怎么能这样做呢?
非常感谢你。
注意:我不知道使用的C ++版本(dunno我可以检查它)但我知道它不是c ++ 11
答案 0 :(得分:2)
第一个问题是您应该注意在源代码中使用Unicode字符。编译器只需要支持特定的字符集,并非所有编译器都喜欢你的代码。我建议您阅读this回答以获得更详细的解释。
第二个问题是角色要大到要用字符文字表示。您需要明确告诉编译器使用宽字符文字。
L'\x20AC` // Notice the preceeding L
第三个问题是你的其余代码仍然使用窄字符串。将std::string
更改为std::wstring
。
答案 1 :(得分:1)
std :: string假设所有字符都以一个字节编码。你想要的符号是一个unicode字符,用两个字节编码(这就是你得到'多字符字符'错误的原因)
最好使用了解unicode并坚持使用该库的库。这个问题可能有用:unicode string in c++ with boost
答案 2 :(得分:0)
&#34; \ u20AC&#34;是一个字符串,所以你应该将你的大字符串拆分成一些子字符串 然后你与他们比较。如果它们相等,则替换它 否则你替换子字符串中的每个字符
string al = "Test €"; (assume you declared std namespace already)
string letter="";
char* ch = strtok(al," ");
while(ch!=NULL) {
if(al.compare(ch)==0){
letter="euro";
}
//your code here
}