2013-03-25 21 views
0

我有我的新應用程序的一個問題:NSMutableArray的比較不同的計數

我有兩個字符串:

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]; 
    } 
} 

T母雞我得到:

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

所以我可以打印:

伊爾alllla阿拉一拉prisssson監獄河畔樂冠軍

沒關係,我可以得到用戶的錯誤。

但是我有一個問題,當數組沒有相同的計數!

如果我有:

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

我想打印:

伊爾fjdbfds alllla阿拉一拉監獄fdnfs河畔樂cahmp冠軍

當我進入我的f時,該應用程序崩潰或(...),因爲我試圖插入NSS對象到NSString

請幫助我,貝寶捐款,如果需要。

謝謝大家。

馬丁是世界上最好的開發者:

字符串的用戶: 伊爾阿拉河畔樂冠軍一拉監獄朱朱,IL descendit AU cabanon杜saltimbanque; il l'appela par son nom,lui pris la main et lui parla。伊爾帕薩拉女王阿普雷斯德魯伊,oubliant la nourriture et le sommeil,priant dieu pour l'ame ducondamnéet priant lecondmanépour la sienne propre。 Il lui dit les meilleures verite qui sont les plus simples。 Il fut pere,frere,ami,eveque pour benir seulement。在這裏,您可以放鬆一下,放鬆一下。 Cet homme allait mourir deseperer。 La mort etait pour lui comme un abime。在這場比賽中,Debout和Fremissant一起訓練了一場比賽。 Il n'etait pas assez ignorant pour etre absoluement indifferent。薩con con,sec sec sec sec sec sec,,,,,,a sort sort sort sort sort sort sort sort sort sort sort。。。。。。。。。。。。。。。。。。我認爲,無國界法律援助組織可以在法國和其他國家建立法治社會。 L'eveque lui fit voir une clarte。

String參考:Il alla sur le champàla prison,il descendit au cabanon du saltimbanque; il l'appela par son nom,lui prit la main et lui parla。他花了一整天和他在一起,廢寢忘食,向上帝祈禱的譴責的靈魂,祈禱自己的犯人。他告訴她最簡單的事實。他是一位父親,兄弟,朋友,主教,只保佑他。他教他一切,讓他放心,安慰他。這個人絕望地死去了。死亡對他來說就像一個深淵。站在顫抖其悲切邊緣,他驚恐地退縮了。他並不是無知,完全無動於衷。他的信念,深刻的衝擊,不知何故在這裏和那裏打破周圍的壁從事物的奧祕我們分開的,我們稱之爲生活。他凝視着不斷超越這個世界通過這些致命的漏洞,看見的只是一片黑暗。主教向他展示了一盞燈。

字符串結果: 他繼續在球場上有-朱朱監獄監獄,下降到走江湖的細胞;他叫他的名字,把他的手,對他說話。他花了一整天附近他,廢寢忘食,向上帝祈禱神爲魂靈魂condmané判處的祈福譴責爲他自己。他說,最好的真相的真理,這是最簡單的。他是父親,兄弟,父親,兄弟,朋友主教主教祝福只祝福。他教他一切,讓他放心,安慰他。這個人要死了**絕望。絕望。死是是他作爲一個深淵。站起來,顫顫巍巍顫抖這個令人沮喪的水平,他驚恐地退縮了。這不是不是那麼無知是絕對冷漠絕對無動於衷。他的信念,深刻的衝擊,有一些 _quelque_所以這裏被打破在這裏和那裏打破圍繞該壁從事物的奧祕我們分開,我們稱之爲周圍生活。 _IT不停地看着這個世界,通過這些致命違反dehors_ _and只看到黑暗。該évêque_他這coison從我們稱之爲生活lystere事情我們分開。他凝視着不斷超越這個世界AR其致命的角礫岩和coyait黑暗。主教給了他看到清晰度。clarté

+0

您需要檢查我編輯的答案! – 2013-03-25 13:26:45

回答

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:

伊爾fjdbfdsalllla阿拉一拉監獄fdnfs河畔樂cahmp冠軍

+0

幾乎。 。 。 – user2206906 2013-03-25 14:56:47

+0

@ user2206906:那麼缺少什麼?你能給個例子嗎? – 2013-03-25 15:00:16

+0

難道我給你舉例可以上傳圖片嗎? – user2206906 2013-03-25 15:01:00

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? 
    } 
} 
+0

是的,我已經忘記.count對不起:) – user2206906 2013-03-25 13:02:45

+0

然後,應用程序應該是墜毀@ user2206906 – 2013-03-25 13:04:37

0

原因很簡單,對於「arrayUser」您的應用程序崩潰計數小於你正在運行環路「arrayReference」 &試圖獲取「arrayUser」價值「arrayReference」 &的計數.. 。

你需要爲了適用下列片段來比較你的兩個陣列

這將幫助你比較任意動態數組


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

欣賞節目!

+0

不,在他給出的例子中不包含相同的計數! – 2013-03-25 13:03:45

+0

你是對的。我的錯。 – vikingosegundo 2013-03-25 13:07:16

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 
    } 
} 
+0

thnaks我會盡量在幾分鐘後回覆,謝謝 – user2206906 2013-03-25 13:11:10

+0

沒有這個不行,這不是我想做的事,謝謝你的時間 – user2206906 2013-03-25 13:18:43

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]; 
    } 
} 
+0

不要刪除所有額外的單詞,謝謝你的時間 – user2206906 2013-03-25 13:34:47

+0

編輯:when有一個額外的單詞接下來是假的 – user2206906 2013-03-25 13:49:31

1

在下面一行

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

這裏給出了兩個格式說明符(%@),但您只給出了一個值。這是造成這次事故的原因。 這條線應該像。

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

最簡單的方法是將第一個字符串轉換爲NSDictionary。由於我們不關心數值,所以將它們初始化爲零。

因此,這看起來像NSString *string1 = @"Il alla a la prison sur le champ"

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

現在轉換成數組後通過第二串迭代。創建一個新的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 

} 

我剛剛給了一個基本的想法。你需要解決的幾個坑陷落。例如,如果字典中包含比數組等更多的字符串,那麼該怎麼辦?