Skip to content

Instantly share code, notes, and snippets.

@woodnathan
Created August 21, 2013 02:17
Show Gist options
  • Select an option

  • Save woodnathan/6289692 to your computer and use it in GitHub Desktop.

Select an option

Save woodnathan/6289692 to your computer and use it in GitHub Desktop.
NSString+Canonical
#import <Foundation/Foundation.h>
@interface NSString (Canonical)
- (NSString *)canonicalizedString;
@end
#import "NSString+Canonical.h"
@implementation NSString (Canonical)
- (NSString *)canonicalizedString
{
NSCharacterSet *set = [NSCharacterSet alphanumericCharacterSet];
NSString *lowercaseString = self.lowercaseString;
NSRange range = NSMakeRange(0, lowercaseString.length);
unichar *inputBuffer = malloc(range.length * sizeof(unichar));
[lowercaseString getCharacters:inputBuffer range:range];
unichar *outputBuffer = calloc(1, range.length * sizeof(unichar));
size_t bufferOffset = 0;
for (NSUInteger i = 0; i < range.length; i++)
{
unichar character = inputBuffer[i];
if ([set characterIsMember:character])
outputBuffer[bufferOffset++] = character;
}
NSString *canonicalizedString = [[NSString alloc] initWithCharacters:outputBuffer length:bufferOffset];
free(inputBuffer);
free(outputBuffer);
return canonicalizedString;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment