1

我允许用户在 TextField 中输入一些数据。用户输入Š1234D到 TextField。

我的代码如下所示:

NSString *string = textField.text;
for (int nCtr = 0; nCtr < [string length]; nCtr++) {
                const char chars = [string characterAtIndex:nCtr];
                int isAlpha = isalpha(chars);
}

字符串输出如下所示:Š1234D 然后我打印了第一个 chars 值,它看起来像这样:'`' 而不是 'Š'。为什么会这样?我也想在我的代码中允许特殊字符。

任何建议也将受到欢迎。需要一些指导。谢谢

4

2 回答 2

3

您将字符值截断为[NSString chatacterAtIndex:]返回unichar(16 位)而不是char(8 位)。尝试:

unichar chars = [string characterAtIndex:nCtr];

更新:还请注意,您不应该isalpha()用于测试字母,因为这仅限于拉丁字符集,并且您需要可以处理非拉丁字符的东西。请改用此代码:

NSCharacterSet *letterSet = [NSCharacterSet letterCharacterSet];
NSString *string = textField.text;
for (NSUIntger nCtr = 0; nCtr < [string length]; nCtr++)
{
    const unichar c = [string characterAtIndex:nCtr];
    BOOL isAlpha = [letterSet characterIsMember:c];
    ...
}
于 2013-02-27T11:12:52.040 回答
3

characterAtIndex:返回一个unichar(2 字节 Unicode 字符),而不是char(1 字节 ASCII 字符)。通过将其转换为char,您只会获得两个字节中的一个。

您应该打开编译器警告。我相信“可疑的隐式转换”应该可以解决问题。

在单独的说明中,您不能isAlpha(char)unichar. 采用[[NSCharacterSet letterCharacterSet] characterIsMember:chars]

于 2013-02-27T11:13:01.490 回答