如何从字符串中解析欧元符号?
How can I parse the Euro symbol from a string?
我正在尝试为每个字符解析一个字符串字符,以便我可以根据每个字母加载图像。因此,如果文本是“你好”,我将打印 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] 是否是能够将“欧元”赋给字母的 € 符号(然后我的代码才能使用它)
我在 google 上搜索并发现 link 说 "\u20AC"
是 € 的 c++ 代码,我想这个符号可能需要一个字节以上,但仍然找不到如何处理它并能够在我的代码中解析它。知道我该怎么做吗?
非常感谢。
注意:我不知道使用的 C++ 版本(不知道在哪里可以查看)但我知道它不是 c++11
std::string 假定所有字符都编码为一个字节。你想要的符号是一个用两个字节编码的 unicode 字符(这就是你得到 'multi character character' 错误的原因)
最好使用理解 unicode 的库并坚持使用它。这个问题可能是相关的:unicode string in c++ with boost
第一个问题是您应该注意在源代码中使用 Unicode 字符。编译器只需要支持特定的字符集,并不是所有的编译器都喜欢你的代码。我建议您阅读 this 答案以获得更详细的解释。
第二个问题是字符太大,无法用字符文字表示。您需要明确告诉编译器改用宽字符文字。
L'\x20AC` // Notice the preceeding L
第三个问题是您的其余代码仍然使用窄字符串。将 std::string
更改为 std::wstring
。
"\u20AC" 是一个字符串,所以你应该把你的大字符串分成一些子字符串
然后你和他们比较。如果它们相等,则替换它
否则你替换子字符串中的每个字符
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
}
我正在尝试为每个字符解析一个字符串字符,以便我可以根据每个字母加载图像。因此,如果文本是“你好”,我将打印 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] 是否是能够将“欧元”赋给字母的 € 符号(然后我的代码才能使用它)
我在 google 上搜索并发现 link 说 "\u20AC"
是 € 的 c++ 代码,我想这个符号可能需要一个字节以上,但仍然找不到如何处理它并能够在我的代码中解析它。知道我该怎么做吗?
非常感谢。
注意:我不知道使用的 C++ 版本(不知道在哪里可以查看)但我知道它不是 c++11
std::string 假定所有字符都编码为一个字节。你想要的符号是一个用两个字节编码的 unicode 字符(这就是你得到 'multi character character' 错误的原因)
最好使用理解 unicode 的库并坚持使用它。这个问题可能是相关的:unicode string in c++ with boost
第一个问题是您应该注意在源代码中使用 Unicode 字符。编译器只需要支持特定的字符集,并不是所有的编译器都喜欢你的代码。我建议您阅读 this 答案以获得更详细的解释。
第二个问题是字符太大,无法用字符文字表示。您需要明确告诉编译器改用宽字符文字。
L'\x20AC` // Notice the preceeding L
第三个问题是您的其余代码仍然使用窄字符串。将 std::string
更改为 std::wstring
。
"\u20AC" 是一个字符串,所以你应该把你的大字符串分成一些子字符串 然后你和他们比较。如果它们相等,则替换它 否则你替换子字符串中的每个字符
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
}