如何从字符串中解析欧元符号?

时间:2015-07-16 11:46:23

标签: c++ eclipse fedora

我正在尝试解析每个字符的字符串字符,以便根据每个字母加载图像。因此,如果文本是“你好”,我将打印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

3 个答案:

答案 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
}