黑马程序员技术交流社区

标题: 求解答疑惑 [打印本页]

作者: lnyg1992    时间: 2014-12-15 21:27
标题: 求解答疑惑
本帖最后由 lnyg1992 于 2014-12-15 21:31 编辑
  1. NSString * stringWithoutNum(NSString *str)
  2. {
  3.     NSMutableString *s = [[NSMutableString alloc] init];
  4.     s.string = str;
  5.     for (int i = 0; i < s.length; i++)
  6.     {
  7.         unichar c = [s characterAtIndex:i];
  8.         if (c >= '0' && c <= '9')
  9.         {
  10.             [s deleteCharactersInRange:NSMakeRange(i, 1)];
  11.         }
  12.         
  13.     }
  14.     return s;
  15. }
复制代码
练习题:实现函数NSString * stringWithoutNum(NSString *str);    删除字符串str的所有数字上面是我想的,可是如果字符串中连着几个数字,只会删除连着数字的第一个数字,如果字符串中数字没有连着,可以删除,这是为什么呢?比如字符串@"1k2i",用上面函数可以实现变成@"ki",但是字符串是@"11k2i",函数过后就字符串成@"1ki"了。
求解答!!!谢谢!


作者: 从今以后    时间: 2014-12-16 08:49
第7行,unichar c = [s characterAtIndex:i]; 每次进入循环都是重新在新的字符串基础上计算位置,[s deleteCharactersInRange:NSMakeRange(i, 1)];一旦删除后,字符串长度-1,i对应位置变成了下一位,即下次得到的字符位置变成了后一位,所以第二个1被跳过去了。
[s deleteCharactersInRange:NSMakeRange(i, 1)];后加个i--;
每次删除字符后后把i-1来抵消这种情况。i < s.length;这个判断也是每次重新计算长度的,不会越界。
作者: 邹志鹏    时间: 2014-12-16 08:58
楼上正解,但是我还是有个地方没看懂:s.string = str;
请问这句是什么用意呢?
作者: lnyg1992    时间: 2014-12-16 13:41
从今以后 发表于 2014-12-16 08:49
第7行,unichar c = [s characterAtIndex:i]; 每次进入循环都是重新在新的字符串基础上计算位置,[s delete ...

多谢大神,大神能说个更简单的方法吗
作者: 从今以后    时间: 2014-12-16 13:44
邹志鹏 发表于 2014-12-16 08:58
楼上正解,但是我还是有个地方没看懂:s.string = str;
请问这句是什么用意呢? ...

[s setString:str];NSMutableString有个set方法 点语法就成这样了s.string = str; 我开始以为写错了。。
作者: lnyg1992    时间: 2014-12-16 13:45
邹志鹏 发表于 2014-12-16 08:58
楼上正解,但是我还是有个地方没看懂:s.string = str;
请问这句是什么用意呢? ...

因为要求函数形参是nsstring类型的,要想改变字符串,将nsstring改为NSMutableString,s.string = str;这是调用NSMutableString对象的setString方法
作者: 从今以后    时间: 2014-12-16 13:51
lnyg1992 发表于 2014-12-16 13:41
多谢大神,大神能说个更简单的方法吗

不是大神= =你这么写已经挺简单了吧 我用的是这个[newStr appendFormat:@"%c", c]; 你是删除 我是挑出来拼个新的。
作者: lnyg1992    时间: 2014-12-16 13:58
从今以后 发表于 2014-12-16 13:51
不是大神= =你这么写已经挺简单了吧 我用的是这个[newStr appendFormat"%c", c]; 你是删除 我是挑出来 ...

噢噢,谢谢了!
作者: 邹志鹏    时间: 2014-12-16 14:31
从今以后 发表于 2014-12-16 13:44
[s setString:str];NSMutableString有个set方法 点语法就成这样了s.string = str; 我开始以为写错了。。 ...

好神奇,没见过这种写法,大神~~1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2