A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#import <Foundation/Foundation.h>
NSString * stringWithoutNum(NSString *str);
int main(int argc, const char * argv[]) {
    @autoreleasepool {
      //3.实现函数NSString * stringWithoutNum(NSString *str);删除字符串str的所有数字
        NSString *str = @"hu1f43d5f6dfrgr";
       NSString *strnew = stringWithoutNum(str);
        NSLog(@"%@", strnew);
    }
            return 0;
}

NSString * stringWithoutNum(NSString *str)
{
NSMutableString *str1 = [NSMutableString stringWithString:str];
    for (int i =0; i< str.length; i++) {
        unichar c = [str characterAtIndex:i];
         NSRange range = NSMakeRange(i, 1);
        if (c >= '0' && c <= '9') {
            [str1 deleteCharactersInRange:range];
        }
    }
    NSString *newstr = [NSString stringWithString:str1];
    return newstr;
}
运行不对,求大神

2 个回复

正序浏览
从今以后 发表于 2015-1-1 18:14
NSRange range = NSMakeRange(i, 1);
这步算出的是相对于str的位置,但是str1在删除字符中长度逐渐变短,这 ...

大神好厉害,可是自己做的时候想不到啊
回复 使用道具 举报
NSRange range = NSMakeRange(i, 1);
这步算出的是相对于str的位置,但是str1在删除字符中长度逐渐变短,这个位置就不适用str1了。
把for循环开始所有str改成str1,也就是所有计算相对于str1进行,然后每次如果删除了字符就把i - 1,抵消str1变短的效果。
  1. for (int i = 0; i < str1.length; i++) {
  2.         unichar c = [str1 characterAtIndex:i];
  3.         NSRange range = NSMakeRange(i, 1);
  4.         if (c >= '0' && c <= '9') {
  5.             [str1 deleteCharactersInRange:range];
  6.             --i;
  7.         }
  8.     }
复制代码
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马