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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lnyg1992 中级黑马   /  2014-12-15 21:27  /  739 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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"了。
求解答!!!谢谢!

8 个回复

倒序浏览
第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;这个判断也是每次重新计算长度的,不会越界。

评分

参与人数 1黑马币 +2 收起 理由
lnyg1992 + 2 很给力!

查看全部评分

回复 使用道具 举报
楼上正解,但是我还是有个地方没看懂:s.string = str;
请问这句是什么用意呢?
回复 使用道具 举报
从今以后 发表于 2014-12-16 08:49
第7行,unichar c = [s characterAtIndex:i]; 每次进入循环都是重新在新的字符串基础上计算位置,[s delete ...

多谢大神,大神能说个更简单的方法吗
回复 使用道具 举报
邹志鹏 发表于 2014-12-16 08:58
楼上正解,但是我还是有个地方没看懂:s.string = str;
请问这句是什么用意呢? ...

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

因为要求函数形参是nsstring类型的,要想改变字符串,将nsstring改为NSMutableString,s.string = str;这是调用NSMutableString对象的setString方法
回复 使用道具 举报
lnyg1992 发表于 2014-12-16 13:41
多谢大神,大神能说个更简单的方法吗

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

噢噢,谢谢了!
回复 使用道具 举报
从今以后 发表于 2014-12-16 13:44
[s setString:str];NSMutableString有个set方法 点语法就成这样了s.string = str; 我开始以为写错了。。 ...

好神奇,没见过这种写法,大神~~1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马