0

我的新应用有问题:

我有两个字符串:

NSString *string1 = @"Il alla a la prison sur le champ" 
NSString *string2 = @"Il alllla a la prissson sur le champ"

我制作数组:

NSArray *arrayReference = [string1 componentsSeparatedByString:@" "]; 
NSArray *arrayUser = [string2 componentsSeparatedByString:@" "]; 

我比较数组:

NSMutableArray *arrayResult; 

for (int i = 0; i < arrayReference.count ; i++)
{
  NSString *stringReference = [arrayReference objectAtIndex:i]; 
  NSString *stringUser = [arrayUser objectAtIndex:i]; 

  if ([stringReference isEqualToString:stringUser])
  {
    [arrayResult addObject:stringUser]; 
  }
  else {
    [arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser]; 
  }
}

然后我得到:

NSString *stringResult = [arrayResult componentsJoinedByString:@" "]; 

所以我可以打印:

Il alllla alla a la prissson 监狱sur le champ

没关系,我可以得到用户的错误。

但是当数组的计数不同时我遇到了问题!

如果我有 :

NSString *string1 = @"Il alla a la prison sur le champ";
NSString *string2 = @"Il fjdbfds alllla a la prison fdnfs sur le cahmp";

我想打印:

Il fjdbfds alllla allla alla a la jail fdnfs sur le cahmp champ

当我输入我的 for (...) 时应用程序崩溃,因为我试图将 nil 对象插入到 NSString

请帮助我,如果需要,贝宝捐款。

谢谢大家。

对于世界上最好的开发者 Martin 来说:

字符串用户 : Il alla sur le champ a la jail juju, il descendit au cabanon du saltimbanque ; il l'appela par son nom, lui pris la main et lui parla。Il passa toute la journée auprés de lui, oubliant la nourriture et le sommeil, priant dieu pour l'ame du condamné et priant le condmané pour la sienne prore。Il lui dit les meilleures verite qui sont les plus simples。Il fut pere, frere, ami, eveque pour benir seulement。Il lui enseigna tout, en le rassurant et en le consolant。Cet homme allait mourir deseperer。La mort etait pour lui comme un abime。Debout et fremissant sur le seuil lugubre, il reculait avec horreur。Il n'etait pas assez ignorant pour etre absoluement 无动于衷。Sa 诅咒,secouusse proonde,avait en quelques sorte rompue ca et la autour de lui cette coison qui nous separe du lystere des chooses et que nous appelons la vie。Il respectait sans cesse au dehors de ce monde ar ses breches fatales, et ne coyait que des tenebres。L'eveque lui fit voir une clarte。

字符串参考 : Il alla sur le champ à la jail, il descendit au cabanon du saltimbanque ; il l'appela par son nom, lui prit la main et lui parla。Il passa toute la journée auprès de lui, oubliant la nourriture et le sommeil, priant Dieu pour l'âme du condamné et priant le condamné pour la sienne prore。Il lui dit les meilleures vérités, qui sont les plus simples。Il fut père, frère, ami, évêque pour bénir seulement。Il lui enseigna tout, en le rassurant et en le consolant。Cet homme allait mourir désespéré。La mort était pour lui comme un abîme。Debout et frémissant sur ce seuil lugubre, il reculait avec horreur。Il n'était pas assez ignorant pour être absolument indifférent。Sa 诅咒,secouusse proonde,avait en quelque sorte rompu çà et là autour de lui cette cloison qui nous sépare du mystère des chooses et que nous appelons la vie。Il respectait sans cesse au dehors de ce monde par ces brèches fatales, et ne voyait que des ténèbres。L'évêque lui fit voir une clarté。

结果字符串: Il alla sur le champ a à la jail juju , jail , il descendit au cabanon du saltimbanque ; il l'appela par son nom, lui pris prit la main et lui parla。Il passa toute la journée auprés auprès de lui, oublant la nourriture et le sommeil, priant dieu Dieu pour l'ame l'âme du condmané condamné et priant le condamné pour la sienne prore。Il lui dit les meilleures verite vérités , qui sont les plus simples。Il fut père, frère, père,frère ami, eveque évêque pour benir bénir seulement。Il lui enseigna tout, en le rassurant et en le consolant。Cet homme allait mourir **desperer。 désespéré。La mort etait était pour lui comme un abîme。Debout et fremissant frémissant sur le ce seuil lugubre, il reculait avec horreur。Il n'etait n'était pas assez ignorant pour etre absoluement indifférent être absolument indifférent。Sa condamnation, secouusse profonde, avait en quelques _quelque_ sorte rompu çà rompu çà etlà autour de lui cette cloison qui nous sépare du mystère des chooses et que nous appelons la autour vie。_Il respectait sans cesse au dehors_ de ce monde par ces brèches fatales, _et ne voyait que des ténèbres。L'évêque_ lui cette coison qui nous separe du lystere des chooses et que nous appelons la vie。Il respectait sans cesse au dehors de ce monde ar ses breches fatales, et ne coyait que des tenebres。L'eveque lui fit voir une clarte。 澄清

4

7 回答 7

2

代替:

for (int i = 0; i < arrayReference ; i++)

NSInteger index = 0;
for (NSString * stringReference in arrayReference)
{
   if(index < [arrayUser count])
   {
       NSString * stringUser = [arrayUser objectAtIndex: index++];
       ...
       ...
       // do your comparison here
   } else {
       // you need to decide what to do if stringUser would be NULL
   }
}
于 2013-03-25T13:04:57.967 回答
1

你正在检查i < arrayReference。但是 arrayReference 是一个数组,您必须检查数组中的项目数。

for (int i = 0; i < [arrayReference count] ; i++) {
    NSString *stringReference = [arrayReference objectAtIndex:i];
    if([arrayUser count]> i) {
         NSString *stringUser = [arrayUser objectAtIndex:i]; 
         if ([stringReference isEqualToString:stringUser])
         {
            [arrayResult addObject:stringUser]; 
         } else {
            [arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser]; 
         }
    } else {
        //do you want to do something if the second array does not contain more words?
    }
}
于 2013-03-25T12:58:02.903 回答
1

在下一行

 [arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser];

您在这里给出了两个格式说明符(%@),但您只给出了一个值。这就是崩溃的原因。这条线应该是这样的。

[arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser,@"Some Text"];
于 2013-03-25T13:21:03.863 回答
0

尝试这个

for (int i = 0; i < [arrayReference count] ; i++)
{

    NSString *stringReference = [arrayReference objectAtIndex:i];

    NSString *stringUser = @"";
    if (i<[arrayUser count]) {
         [arrayUser objectAtIndex:i];
    }

    if ([stringReference isEqualToString:stringUser])
    {
        [arrayResult addObject:stringUser];
    }
    else {

         NSString *tempString = @"";
        if ([stringUser length])
        {
            tempString = [NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",
                          stringUser,stringReference];
        }
        else{
            tempString = [NSString stringWithFormat:@"<italic>%@</italic>",stringReference];
        }

        [arrayResult addObject:tempString];
    }
}
于 2013-03-25T13:16:27.537 回答
0

这是你想要的?

NSString *string1 = @"Il alla a la prison sur le champ";
NSString *string2 = @"Il fjdbfds alllla a la prison fdnfs sur le cahmp";

NSMutableArray *array1 = [[string1 componentsSeparatedByString:@" "] mutableCopy];
NSMutableArray *array2 = [[string2 componentsSeparatedByString:@" "] mutableCopy];
NSMutableArray *goodArray = [NSMutableArray array];

while ([array1 count] > 0 && [array2 count] > 0) {
    // Check if first word of array2 occurs in array1: 
    NSString *word = [array2 objectAtIndex:0];
    NSUInteger idx = [array1 indexOfObject:word];
    if (idx == 0) {
        // correct word
        [goodArray addObject:word];
        [array1 removeObjectAtIndex:0];
        [array2 removeObjectAtIndex:0];
    } else if (idx == NSNotFound || idx > 4) {
        // extra word in array2
        [goodArray addObject:[NSString stringWithFormat:@"<strong>%@</strong>", word]];
        [array2 removeObjectAtIndex:0];
    } else {
        // missing word from array1
        word = [array1 objectAtIndex:0];
        [goodArray addObject:[NSString stringWithFormat:@"<em>%@</em>", word]];
        [array1 removeObjectAtIndex:0];
    }
}
// Remaining missing words:
for (NSString *word in array1) {
    [goodArray addObject:[NSString stringWithFormat:@"<em>%@</em>", word]];
}
// Remaining extra words:
for (NSString *word in array2) {
    [goodArray addObject:[NSString stringWithFormat:@"<strong>%@</strong>", word]];
}

NSString *stringCorrected = [goodArray componentsJoinedByString:@" "];
NSLog(@"%@", stringCorrected);

输出:

Il <strong>fjdbfds</strong> <strong>alllla</strong> <em>alla</em> a la prison <strong>fdnfs</strong> sur le <strong>cahmp</strong> <em>champ</em>

或呈现为 HTML:

Il fjdbfds alllla allla alla a la jail fdnfs sur le cahmp champ

于 2013-03-25T14:21:20.710 回答
0

The easiest way is convert the first string to NSDictionary. Since we dont care about values lets initialize them to zeros.

So this will look like NSString *string1 = @"Il alla a la prison sur le champ"

Il -> 0, alla ->0 a -> 0, la -> 0 etc.

Now iterate through the second string after converting to array. Create a new resultString.

for(iterate elements through array)
{
   check if the element exists in dictionary
   if(!exists)
   {
      concatenate the result string with element that does not exist
   }

   concatenate the result string with current element

}

I just gave a basic idea. There are few pit falls which you need to address. Ex what if the dictionary contains more strings compared to array etc.

于 2013-03-25T16:11:53.220 回答
0

“arrayUser”的应用程序崩溃计数的简单原因小于“arrayReference”的计数,并且您正在为“arrayReference”运行循环,并试图获取“arrayUser”的值......

您需要应用以下代码段才能比较您的两个数组

这将帮助您比较任何动态阵列


for (int i = 0; i < [arrI count]; i++)
{
    for (int j = 0; j < [arrJ count]; j++)
    {
        if ([[arrJ objectAtIndex:j] isEqualToString:[arrI objectAtIndex:i]])
        {
            NSLog(@"%@",[arrI objectAtIndex:i]);
        }
    }
}

其中 arrI = arrReference 和

arrJ = arrUser

享受编程!!

于 2013-03-25T13:02:07.740 回答