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

来源:互联网 发布:mac如何完全卸载软件 编辑:程序博客网 时间:2024/05/16 15:36

因为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 < [strtemplength]; i++)

    {

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

        if ([selfisChinese:temp]) {

            strlength++;

        }

        strlength++;

    }

    

    return (strlength+1)/2;

}


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

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

        return NO;

    }

    return YES;

}



0 0