2016-11-16 1 views
-4

Ich bin stucked, um herauszufinden, wie kann ich ein Programm, um die Reihenfolge der Namen im Array ändern. Es wird erwartet, dass das Programm zuerst den Nachnamen und nach dem Vornamen zeigt und der Rest des Namens muss abgekürzt werden.C# -Array String-Namen ändern Inhalt Reihenfolge

static void Main(string[] args) 
    { 
     string[] names = { "Paul Page Load Wood", "Michael Kraiser Unter", "Mia Rock Spark" }; 
     /*Present the names 
     names[1] = "Wood, Paul P. l."; 
     names[2] = "Unter, Michael K."; 
     names[3] = "Spark, Mia R."*/ 

    } 

Können Sie bitte helfen.

Danke

Hier ist, was ich bisher habe:

static void Main(string[] args) 
{ 
    string[] names = { "Paul Page Load Wood", "Michael Kraiser Unter", "Mia Rock Spark" }; 
    int i = 0; 
    foreach (string name in names) 
    { 
     string[] eachName = name.Split(' '); // I was advised to no use .split 
     for (int j = 0; j < eachName.Length; j++) 
     { 
      Console.WriteLine("{0} {1}", j, eachName[j]); 
     } 
     i++; 
     Console.WriteLine(); 
    } 
} 
+1

Sie sollten schreiben, was Sie bisher versucht haben. Wir sind hier, um dir zu helfen, nicht deine Hausaufgaben zu machen. –

+1

[Fragen, die nach Hausaufgabenhilfe fragen, müssen eine Zusammenfassung der bisherigen Arbeit enthalten, um das Problem zu lösen, und eine Beschreibung der Schwierigkeit, die Sie bei der Lösung des Problems haben.] (Http://stackoverflow.com/help/on -Topic) –

+1

Mögliches Duplikat von [Einfacher Weg, den Namen einer Person in ihre Bestandteile zu zerlegen?] (http://stackoverflow.com/questions/103422/simple-way-to-parse-a-persons-name-into- its-component-parts) – Kritner

Antwort

1

Zuerstaufwendigen Regeln lasst uns:

  1. Ein Teil "John" -> "John" (nichts)
  2. Zwei Teile "John Smith" -> "Smith, John" (letzte zuerst)
  3. Drei + Teile "John Peter Jack Smith" -> "Smith, John P. J." (letzte zuerst, andere, um als einzelne Buchstaben)

diese Regeln Nachdem wir eine einfache Nachbestellung implementieren können:

private static String ReOrderNamesParts(string name) { 
    if (string.IsNullOrEmpty(name)) 
    return name; 

    string[] parts = name.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

    if (parts.Length <= 0) 
    return name; 

    StringBuilder sb = new StringBuilder(parts[parts.Length - 1]); 

    if (parts.Length > 2) { 
    sb.Append(", "); 
    sb.Append(parts[0]); 
    } 

    for (int i = 1; i < parts.Length - 1; ++i) { 
    sb.Append(' '); 
    sb.Append(parts[i].Substring(0, 1)); 
    sb.Append('.'); 
    } 

    return sb.ToString(); 
} 

Und so können Sie setzen

string[] names = { "Paul Page Load Wood", "Michael Kraiser Unter", "Mia Rock Spark" }; 

for (int i = 0; i < names.Length; ++i) 
    names[i] = ReOrderNamesParts(names[i]); 

Oder wenn Sie möchten nur zum Ausdrucken:

Console.Write(String.Join(Environment.NewLine, 
    names.Select(name => eOrderNamesParts(names)))); 
+0

@Pedro Silva: Was ist falsch mit 'Split' und' StringBuilder', bitte? Es ist ganz natürlich, die ursprüngliche Saite in ihre Teile zu teilen und dann aus den neu geordneten Teilen * aufzubauen *. –

Verwandte Themen