从QString中提取字符并进行比较
Extract character from QString and compare
我试图比较QString中的特定字符,但得到了奇怪的结果:
我的名为strModified的QString包含:"[y]$trainstrip+[height]$trainstrip+8"
我将字符串转换为标准字符串:
std:string stdstr = strModified.toStdString();
我可以在调试器中看到"stdstr"包含正确的内容,但当我尝试提取字符时:
char cCheck = stdstr.c_str()[3];
我得到了完全不同的东西,我本以为会看到"英镑",但结果却得到了-62英镑。我意识到"£"在ASCII字符集之外,代码为156。
但它在回归什么呢?
我修改了原始代码以简化,现在:
const QChar cCheck = strModified.at(intClB + 1);
if ( cCheck == mccAttrMacroDelimited ) {
...
}
其中mccAttrMacroDelimited定义为:
const QChar clsXMLnode::mccAttrMacroDelimiter = '£';
在调试器中,当查看应该是相同值的两个定义时,我得到:
cCheck: -93 '£'
mccAttrMacroDelimiter: -93 with what looks like a chinese character
比较失败。。。发生了什么事?
我已经完成了将所有QChar引用更改为无符号字符的代码,现在我得到了一个警告:
large integer implicitly truncated to unsigned type [-Woverflow]
上:
const unsigned char clsXMLnode::mcucAttrMacroDelimiter = '£';
再说一遍,为什么?根据谷歌搜索,这可能是一条虚假消息。
我很高兴地说,这已经解决了问题,解决方案,将检查字符声明为无符号字符,并使用:
const char cCheck = strModified.at(intClB + 1).toLatin1();
我认为因为"£"不是ASCII表,所以您会从"char"中得到奇怪的行为。Xcode中的编译器甚至不允许我编译
char c = '£'; error-> character too large for enclosing literal type
您可以使用unicode,因为在unicode字符表中可以找到"£"£:u+00A3 | 12月:163日。
这个问题的答案极大地启发了我写的提取"£"十进制值的代码。
#include <iostream>
#include <codecvt>
#include <locale>
#include <string>
using namespace std;
//this takes the character at [index] and prints the unicode decimal value
u32string foo(std::string const & utf8str, int index)
{
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> conv;
std::u32string utf32str = conv.from_bytes(utf8str);
char32_t u = utf32str[index];
cout << u << endl;
return &u;
}
int main(int argc, const char * argv[]) {
string r = "[y]£trainstrip+[height]£trainstrip+8";
//compare the characters at indices 3 and 23 since they are the same
cout << (foo(r,3) == foo(r, 23)) << endl;
return 0;
}
如果需要,可以使用for循环来获取字符串中的所有字符。希望这能帮助
相关文章:
- 比较字符数组
- C++相互比较字符
- 比较字符* (C/C++) 的最快方法?
- 通过比较字符设置字符串时出现问题
- 比较字符和常量字符串
- 当字符包含表情符号时如何比较字符?
- 比较字符数组 [ ] 与字符 *数组 [ ]
- 比较字符总是返回的
- 比较字符和常量字符
- 比较字符 [] 和字符*
- 区别在于比较字符数组和指向字符字符串的指针与字符字符串
- 如何正确比较字符和0x85
- C++:如何查看正在读取的文件的下一个字符以比较字符?
- 比较字符以在C++中进行验证
- 如何在提升单元测试中比较字符*与字符串
- 我在比较字符数组中的字符时遇到问题
- 像函数 strcmp 一样逐个比较字符
- 比较C++字符* 字符进行解析.OBJ 文件
- 在 C++ 中比较字符与空格
- 在C++中,如何比较字符数组和字符串的大小