识别字符串中颠倒的问号

Identify upside down question mark in a string

本文关键字:字符串 识别      更新时间:2023-10-16

我有一个for循环,查看字符串中的每个字符,目的是消除一些字符。例如,一个有效的比较是…

if(str[i] == '!'){str[i] = NULL;}

我还需要消除颠倒的问号。我尝试了一些东西,包括一些十六进制代码和以下。

if(str[i] == 191){str[i] = NULL;}

在这里,我得到一个错误,"常量191与类型为‘value_type’的表达式的比较总是假的。"我遗漏了什么?我怎样才能捕捉到颠倒的问号?

您的字符串的value_type很可能是char,它可能在您的平台上签名,也可能不签名。

如果有符号,CHAR_MAX将是127…和191年相比,你们发现问题了吗?这就是编译器所抱怨的。

有几种方法可以解决这个问题。

最粗暴的方法是常量转换为value_type

更优雅的(但取决于你的编译器的功能)是在你的源代码中写'¿',并确保你的编辑器和编译器同意源文件使用的编码。

虽然标准只要求在源代码中支持ASCII-7字符的子集(减去反引号,$@),但实现是自由的(并且通常非常有能力)支持其他编码。

对于GCC,选项是-finput-charset=...,默认为UTF-8。

当然,所有这些都是假设您的源和您的输入也同意各自的编码。可以说是在同一个代码页上。: -)

话虽如此,如果您要在应用程序中处理国际字符,您可能需要查看ICU库和完整的Unicode支持。