使用类目删除可变字符串中重复字母的一个算法

问题:为可变字符串类添加一个检测是不是有重复字母的方法:例如:@“abccd”调用这个函数后变成@”abcd”

思路:1.应用类目(Category)为NSMutableString添加一个方法;

   2.找到字符串中重复字母并删除其中重复字母的算法:

    (1)遍历字符串,提取相邻的字母进行比较;

    (2)通过API提供的方法删除处在较后位置的重复字母;

    (3)注意可变字符串删除字母后字符串长度的变化。

代码:

//新建一个NSMutableString类的类目,类目的声明文件

#import <Foundation/Foundation.h> 

@interface NSMutableString (DeleteRepeatLetter) 

// 编写一个删除重复字母的方法

-(void)deleteRepeate:(NSMutableString *)aMstr; 

@end

 

// 类目的实现文件

#import "NSMutableString+DeleteRepeatLetter.h" 

@implementation NSMutableString (DeleteRepeatLetter) 

-(void)deleteRepeate:(NSMutableString *)aMstr

{

  // 使用self.length在循环的时候时刻检测字符串的长度

    for (int i = 0; i < self.lngth; i++)

    {

        char p = [aMstr characterAtIndex:i];

        for (int j = i+1; j < self.length; j++)

        {

            char q = [aMstr characterAtIndex:j];

            if (p == q)

            {

                [aMstr deleteCharactersInRange:NSMakeRange(j, 1)];

                j--;  // 为保证 j++后指向一致,所以要j--,因为删除字母后后面的字母会往前提

            }

        }

    }

@end

 

// 在主函数中

#import "NSMutableString+DeleteRepeatLetter.h" // 导入类目

NSMutableString * str = [NSMutableStringstringWithString:@"aabbccddee"];

    [str deleteRepeate:str];

    NSLog(@"%@",str);

 

 

posted @ 2014-02-11 19:06  Songxin  阅读(403)  评论(0编辑  收藏  举报