2016-11-16 55 views
-4

我被困住想弄清楚如何讓程序更改數組中的名稱順序。 期望程序首先顯示姓氏,並在名字和名字的其餘部分必須刪除後。C#數組字符串名稱更改內容順序

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."*/ 

    } 

您能否請幫助。

謝謝

這是我到目前爲止有:

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

你應該寫你到目前爲止嘗試過的。我們在這裏幫助你,而不是做你的功課。 –

+1

[提出作業幫助的問題必須包括迄今爲止解決問題所做的工作摘要,以及對解決問題的描述。](http://stackoverflow.com/help/on -topic) –

+1

[將人的姓名解析爲其組成部分的簡單方法?]的可能重複(http://stackoverflow.com/questions/103422/simple-way-to-parse-a-persons-name-into-它的組成部分) – Kritner

回答

1

首先,讓我們詳細的規則

  1. 一個部分"John" -> "John"(什麼都不做)
  2. 兩個零件"John Smith" -> "Smith, John"(最後,第一個)
  3. 三+"John Peter Jack Smith" -> "Smith, John P. J."(最後,第一個,其他以單字母)

有了這些規則,我們可以實現一個簡單的重新排序:

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(); 
} 

所以你可以把

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

或如果你想只是爲了打印:

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

@Pedro Silva:請問「Split」和「StringBuilder」有什麼問題?將初始字符串拆分成其部分然後從重新排序的部分構建*是很自然的。 –