将""字符追加到 QString



我有一个接收字符串ex."rn"的函数,我需要将''字符附加到字符串的每个字母以获得"rn"。为了附加''字符,我需要用额外的''转义它,但是这会给我错误的字符串。

例如:

QString s = "rn";
QString n = QString("\%1\%2").arg(s[0]).arg(s[1]);
qDebug() << n.compare("rn");

输出79而不是0。我需要第一个字符串(s)与"rn"相同,但我不确定如何正确地附加''字符。

您想要的方式不起作用,因为转义序列是由编译器解释的,而不是在运行时。

非常简单的解决方案是使用生成所需特殊字符的函数:
char get_special_char(char ch) {
switch (ch) {
case 'n':
return 'n';
case 'r':
return 'r';
default:
return ch;
}
}
QString n = QString("%1%2").arg(get_special_char(s[0]))
.arg(get_special_char(s[1]));

如果有很多字符需要转换为特殊符号,可以使用数组char[256]填充所需的符号:a['n'] ->'n', a['r'] ->‘ r’。注意有符号char类型

您可以为每个''编写"\",将92类型转换为char,或者附加'\'(已经是char)

这是必要的,因为是类c语言和大多数其他语言中字符串的转义字符,因此会导致的显示方式与的表示方式之间的问题

为了让自己相信它是相同的,您可以用其他方式显示/,例如二进制或十六进制

#include <stdio.h>
int main()
{
printf("%cn", '\');
printf("%04xn", '\');  // display hex
printf("%04xn", "\"[0]);
printf("%04xn", 92);
return 0;
}
% g++ test.py && ./a.out

005c
005c
005c

最新更新