Eigennamen und normale Wörter in den Log schreiben.

Eli-

Mitglied
Hi, hab in meinem Objectiv-C Buch folgende Aufgabe (Leider ohne Lösung):

In der Datei /usr/share/dict/propernames Sind häufig vorkommende Eigennamen enthalten. Die Datei /usr/share/dict/words Enthält normale Wörter und häufig vorkommende Eigennamen. Schreiben Sie ein Programm, das auf dem obigen Programm basiert und häufig vorkommende Eigennamen findet, die auch normale Wörter sind. "Glen" Beispielsweise ist ein Männer Name, aber "glen" ist auch ein enges Tal. In den Worddateien sind Eigennamen groß geschrieben.
Wenn ein Computer Strings sortiert, stellt er normalerweise Großbuchstaben vor Kleinbuchstaben. Um einen Vergleich vorzunehmen, der die Groß- bzw. Kleinschreibung ignoriert, nehmen sie die Methode caseInsensitiveCompare.

Folgendes habe ich geschrieben:

Code:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //Liest Datei als großen String ein (mögliche Fehler werden ausgeblendet)
        NSString *nameString = [NSString stringWithContentsOfFile:@"/usr/share/dict/words" encoding:NSUTF8StringEncoding error:NULL];
        
        //Zerlegt Datei in ein Array mit String
        NSArray *names = [nameString componentsSeparatedByString:@"\n"];
        
        //Geht das Array einen String nach dem anderen durch
        NSUInteger stringCount = [names count];
        for (int i = 0; i < stringCount; i++) {
            
            if (i == 0) {
                
                continue;
                
            } else {
                int iMinusOne = i--;
                NSString *oldName =[names objectAtIndex:iMinusOne];
                NSString *newName = [names objectAtIndex:i];
                
                if([newName caseInsensitiveCompare:oldName] == NSOrderedSame) {
                    
                    NSLog(@"The following names are propernames AND words: %@ and %@", newName, oldName);
                    
                }
                
            }
            
            
        }
            
            
        }
    
     return 0;   
}

Aber als Ausgabe kommt nur:

[Ein Datum oder so]The following names are propernames AND words: A and a
[Ein Datum oder so]The following names are propernames AND words: A and a
[Ein Datum oder so]The following names are propernames AND words: A and a
[Ein Datum oder so]The following names are propernames AND words: A and a
[Ein Datum oder so]The following names are propernames AND words: A and a
...
Das geht unendlich lang so weiter, bis ich auf Stopp drücke.

weiß jemand, was ich falsche gemacht habe?

Danke schon mal

LG
Dennis

PS: Noch eine Frage zu dieser stelle:
NSArray *names = [nameString componentsSeparatedByString:mad:"\n"];

Das sternchen deutet ja auf einen Zeiger. Heißt das, dass in dem Array nur die Speicherorte gespeichert werden, und nicht die genauen werte? Hab ich das richtig verstanden?
 
In Zeile 16 wird i um 1 inkrementiert, um in Zeile 23 wieder um 1 dekrementiert zu werden => die Abbruchbedingung für die Schleife wird nie erfüllt. Ein guter Compiler sollte das eigentlich erkennen und eine Warnung ausspucken.

Wenn du in Zeile 23 folgende Änderung vornimmst, dürfte es funktionieren:

C:
int iMinusOne = i-1;
 

Neue Beiträge

Zurück