我有一个for循环查看字符串中的每个字符,目的是消除一些字符。例如,一个有效的比较是......
if(str[i] == '!'){str[i] = NULL;}
我还需要消除颠倒的问号。我试过几件事,包括一些十六进制代码和以下内容。
if(str[i] == 191){str[i] = NULL;}
在这里,我得到一个错误,上面写着“常量191与'value_type'类型的表达式的比较始终为false。”我在这里错过了什么?我怎样才能抓住颠倒的问号?
答案 0 :(得分:3)
您的字符串anyType{Id=101;Name=Nitin;Salary=100000';}
很可能是value_type
,可能会在您的平台上签名,也可能不会在您的平台上签名。
如果已签名,char
将为127 ...您在与191进行比较时会发现问题吗?这就是编译器所抱怨的。
有几种解决方法。
最粗略的是将常量转换为CHAR_MAX
。
更优雅(但取决于您的编译器的功能)是在源代码中实际编写value_type
并确保您的编辑器和编译器就源文件使用的编码达成一致。
虽然标准只需要支持源中的ASCII-7字符子集(减去反引号,'¿'
和$
),但实现是免费的(通常非常有能力)支持其他编码
对于GCC,选项为@
,默认为UTF-8。
当然,所有这些都假设您的来源和输入同意他们各自的编码。可以这么说,在同一个代码页上。 ; - )
尽管如此,如果您在应用程序中处理国际字符,您可能需要查看ICU library和完整的Unicode支持。