c#数组字符串名称改变内容顺序

本文关键字:顺序 改变 数组 字符串 | 更新日期: 2023-09-27 18:18:28

我想弄清楚如何编写一个程序来改变数组中名称的顺序。程序应该先显示姓,后显示名,其余部分必须缩写。

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

c#数组字符串名称改变内容顺序

首先,让我们详细说明规则:

  1. 一个部分"John" -> "John"(不做任何事)
  2. 两部分 "John Smith" -> "Smith, John" (last, first)
  3. 三个+部分"John Peter Jack Smith" -> "Smith, John P. J." (last, first, other按单字母顺序排列)
有了这些规则,我们可以实现一个简单的重新排序:
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))));