2016-11-16 47 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”有什么问题?将初始字符串拆分成其部分然后从重新排序的部分构建*是很自然的。 –