计算一段字符串的长度(中文算两个字符)

因为iOS无法和C语言一样计算字符串的字符长度,在需要将一个中文字计算成两个字符的时候,我在网上查到了这个方法。

但是不知道什么原因输入中文“一”的时候,计算出来的会是一个字符(原谅我没有深究……)不知道有没有人跟我一样。


//判断一个字符是不是中文。

-(BOOL)isChinese:(NSString*)c{

    int strlength = 0;

    char* p = (char*)[c cStringUsingEncoding:NSUnicodeStringEncoding];

    for (int i=0 ; i<[c lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {

        if (*p) {

            p++;

            strlength++;

        }

        else {

            p++;

        }

    }

    return ((strlength/2)==1)?YES:NO;

}


//计算一段字符串的长度,两个英文字符占一个长度。


- (int)countTheStrLength:(NSString*)strtemp {

    int strlength = 0;

    char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];

    for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {

        if (*p) {

            p++;

            strlength++;

        }

        else {

            p++;

        }

    }

    return (strlength+1)/2;

}


之后我就自己使用了一个不太专业的办法计算,既然OC中中文无法用ASCII转化,那我就认为用cStringUsingEncoding:NSASCIIStringEncoding返回空的就是中文(至少目前还没发生错误)。


- (int)convertToInt:(NSString*)strtemp {

    

    int strlength = 0;

    

    for(int i =0; i < [strtemp length]; i++)

    {

        NSString *temp = [strtemp substringWithRange:NSMakeRange(i, 1)];

        if ([self isChinese:temp]) {

            strlength++;

        }

        strlength++;

    }

    

    return (strlength+1)/2;

}


-(BOOL)isChinese:(NSString*)c{

    if (c.length && [c cStringUsingEncoding:NSASCIIStringEncoding]) {

        return NO;

    }

    return YES;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值