I’m trying to develop a simple application where i can encrypt a message. The algorithm is Caesar’s algorithm and for example, for ‘Hello World’ it prints ‘KHOOR ZRUOG’ if the increment is 3 (standard).
My problem is how to take each single character and increment it…
I’ve tried this:
NSString *text = @"hello";
int q, increment = 3;
NSString *string;
for (q = 0; q < [text length]; q++) {
string = [text substringWithRange:NSMakeRange(q, 1)];
const char *c = [string UTF8String] + increment;
NSLog(@"%@", [NSString stringWithUTF8String:c]);
}
very simple but it doesn’t work.. My theory was: take each single character, transform into c string and increment it, then return to NSString and print it, but xcode print nothing, also if i print the char ‘c’ i can’t see the result in console. Where is the problem?
First of all, incrementing byte by byte only works for ASCII strings. If you use UTF-8, you will get garbage for glyphs that have multi-byte representations.
With that in mind, this should work (and work faster than characterAtIndex: and similar methods):