Objective c 仅从字符列表中删除字符的第一个实例

Objective c 仅从字符列表中删除字符的第一个实例,objective-c,cocoa,macos,Objective C,Cocoa,Macos,这是我想做的。我有两个字符串,我想确定一个字符串是否是另一个字符串的置换。我想简单地从字符串B中删除字符串A中的字符,以确定是否还剩下任何字符。如果没有,那么它通过了 但是,我需要确保每个字母只删除一个实例(不是所有实例),除非单词中有多个字母 例如: 字符串A:不能 字符串B:连接 结果:-o-nec- 到目前为止,NSString和NSScanner的实验还没有取得任何结果。Hmmm,让我们试一试: NSString *stringA = @"cant"; NSString *stringB

这是我想做的。我有两个字符串,我想确定一个字符串是否是另一个字符串的置换。我想简单地从字符串B中删除字符串A中的字符,以确定是否还剩下任何字符。如果没有,那么它通过了

但是,我需要确保每个字母只删除一个实例(不是所有实例),除非单词中有多个字母

例如:

字符串A:不能

字符串B:连接

结果:-o-nec-

到目前为止,NSString和NSScanner的实验还没有取得任何结果。

Hmmm,让我们试一试:

NSString *stringA = @"cant";
NSString *stringB = @"connect";

NSUInteger length = [stringB length];
NSMutableCharacterSet *charsToRemove = [NSMutableCharacterSet characterSetWithCharactersInString:stringA];

unichar *buffer = calloc(length, sizeof(unichar));
[stringB getCharacters:buffer range:NSMakeRange(0, length)];

for (NSUInteger i = 0; i < length; i++)
{
    if ([charsToRemove characterIsMember:buffer[i]])
    {
        [charsToRemove removeCharactersInRange:NSMakeRange(buffer[i], 1)];
        buffer[i] = '-';
    }
}

NSString *result = [NSString stringWithCharacters:buffer length:length];

free (buffer);
NSString*stringA=@“铁路超高”;
NSString*stringB=@“连接”;
NSU整数长度=[stringB长度];
NSMutableCharacterSet*charsToRemove=[NSMutableCharacterSet characterSetWithCharactersInString:stringA];
unichar*buffer=calloc(长度,sizeof(unichar));
[stringB getCharacters:缓冲区范围:NSMakeRange(0,长度)];
对于(整数i=0;i
嗯,让我们试一试:

NSString *stringA = @"cant";
NSString *stringB = @"connect";

NSUInteger length = [stringB length];
NSMutableCharacterSet *charsToRemove = [NSMutableCharacterSet characterSetWithCharactersInString:stringA];

unichar *buffer = calloc(length, sizeof(unichar));
[stringB getCharacters:buffer range:NSMakeRange(0, length)];

for (NSUInteger i = 0; i < length; i++)
{
    if ([charsToRemove characterIsMember:buffer[i]])
    {
        [charsToRemove removeCharactersInRange:NSMakeRange(buffer[i], 1)];
        buffer[i] = '-';
    }
}

NSString *result = [NSString stringWithCharacters:buffer length:length];

free (buffer);
NSString*stringA=@“铁路超高”;
NSString*stringB=@“连接”;
NSU整数长度=[stringB长度];
NSMutableCharacterSet*charsToRemove=[NSMutableCharacterSet characterSetWithCharactersInString:stringA];
unichar*buffer=calloc(长度,sizeof(unichar));
[stringB getCharacters:缓冲区范围:NSMakeRange(0,长度)];
对于(整数i=0;i
一种低效但简单的方法可能是这样的(这是作为NSString上的一个类别实现的,但也可能是一个包含两个字符串的方法或函数):

@实现NSString(置换)
-(BOOL)isPermutation:(NSString*)其他
{
如果([自身长度]!=[其他长度])返回否;
if([self-isEqualToString:other])返回YES;
NSU整数长度=[自身长度];
NSCountedSet*set1=[[NSCountedSet alloc]initWithCapacity:length]autorelease];
NSCountedSet*set2=[[NSCountedSet alloc]initWithCapacity:length]autorelease];
for(int i=0;i
一种低效但简单的方法可能是这样的(这是作为NSString上的一个类别实现的,但也可能是一个包含两个字符串的方法或函数):

@实现NSString(置换)
-(BOOL)isPermutation:(NSString*)其他
{
如果([自身长度]!=[其他长度])返回否;
if([self-isEqualToString:other])返回YES;
NSU整数长度=[自身长度];
NSCountedSet*set1=[[NSCountedSet alloc]initWithCapacity:length]autorelease];
NSCountedSet*set2=[[NSCountedSet alloc]initWithCapacity:length]autorelease];
for(int i=0;i
这将返回示例要求的内容

NSString* a = @"cant";
    NSString* b = @"connect";

    NSMutableString* mb = [NSMutableString stringWithString:b];
    NSUInteger i;
    for (i=0; i<[a length]; i++) {
        NSString* theLetter = [a substringWithRange:NSMakeRange(i, 1)];
        NSRange r = [mb rangeOfString:theLetter];
        if (r.location != NSNotFound) {
            [mb replaceCharactersInRange:r withString:@"-"];
        }
    }
    NSLog(@"mb: %@", mb);
NSString*a=@“铁路超高”;
NSString*b=@“连接”;
NSMutableString*mb=[nsmutablestringwithstring:b];
NSUI;

对于(i=0;i这将返回示例要求的内容

NSString* a = @"cant";
    NSString* b = @"connect";

    NSMutableString* mb = [NSMutableString stringWithString:b];
    NSUInteger i;
    for (i=0; i<[a length]; i++) {
        NSString* theLetter = [a substringWithRange:NSMakeRange(i, 1)];
        NSRange r = [mb rangeOfString:theLetter];
        if (r.location != NSNotFound) {
            [mb replaceCharactersInRange:r withString:@"-"];
        }
    }
    NSLog(@"mb: %@", mb);
NSString*a=@“铁路超高”;
NSString*b=@“连接”;
NSMutableString*mb=[nsmutablestringwithstring:b];
NSUI;

对于(i=0;iSorry,刚刚看到stringA和stringB以及结果,没有完全阅读问题;)抱歉,刚刚看到stringA和stringB以及结果,没有完全阅读问题;)此解决方案假定两个单词的长度相同,在本例中不起作用。我需要能够检查一个较大单词的子集。如果我不清楚,很抱歉:(@Luke:你可以很容易地去掉长度位,然后用两个字符串中较大的一个来表示长度。从你的问题来看,我以为你想检查一个字符串是否是另一个字符串的排列,如果字符串长度不同,这将是错误的。是的,那是我的错。很抱歉弄错了。我的意思是,这个词不是子集还是排列对单词进行重新命名,意思是给定单词B中的字母,我是否可以在不重复的情况下生成A。下次我将尝试更清楚。不过感谢您的帮助!此解决方案假定两个单词的长度相同,在这种情况下不起作用。我还需要能够检查较大单词的子集。如果我不清楚,请原谅:(@Luke:你可以很容易地去掉长度位,然后用两个字符串中较大的一个来表示长度。从你的问题来看,我以为你想检查一个字符串是否是另一个字符串的排列,如果字符串长度不同,这将是错误的。是的,那是我的错。很抱歉弄错了。我的意思是,这个词不是子集还是排列对单词的定义,意思是给定单词B中的字母,我可以不重复地做A吗?下次我会尽量说得更清楚。谢谢你的帮助!没错。我想我要找的是一个较大字符集的导数或子集。说到这里,我将这个答案标记为正确,因为它提供了两个函数。我还测试了A附带说明的是,我的工作代码检查了char值并移动了内存块,但一直发现内存不足,尽管没有