0

大家好,

我想根据字母顺序在一行中交换两个字符串。

例子:

Arun 2012,Gopi 2010,Dinesh 2012。计算机网络,Tata McGraw Hill。745:19-22

在这一行中,作者姓名 Likely Arun、Dinesh、Gopi 必须按字母顺序交换并保存在同一个文件中以供参考。

怎么可能完全交换字符串数组?

这是我尝试过的:

foreach (string strPara in strParaValue) 
{ 
   string[] strAuthorsPart = strPara.Split('.'); 
   string[] strAuthorslist = strAuthorsPart[0].Split(','); 
   string[] strAuthor = strAuthorslist[0].Split(' '); 
   if (strSplitValue[0].Contains(strAuthor[0].Trim())) 
   { 
      swt.WriteLine(strAuthor[0] + "\t"); 
   } 
   else 
   {
      swf.WriteLine(strAuthor[0] + "\t"); 
   }
}

谢谢迪戈。

4

3 回答 3

1

你的意思是这样的?

string tosort = " Arun 2012, Gopi 2010, Dinesh 2012. Computer Networks, Tata McGraw Hill. 745:19-22";
string sortedAuthors = "";
string sortedTexts = "";
List<string> mylist = tosort.Split(new[]{',', '.'}).ToList<string>();
mylist.Sort();
mylist.ForEach(n => if(n.Substring.IndexOf(" ").sorted += n + ",");

这将产生输出

“ 745:19-22,Arun 2012,计算机网络,Dinesh 2012,Gopi 2010,Tata McGraw Hill,”

根据您的评论,试试这个:

string tosort = " Arun 2012, Gopi 2010, Dinesh 2012. Computer Networks, Tata McGraw Hill. 745:19-22";
string sortedAuthors = "";
string sortedTexts = "";
List<string> mylist = tosort.Split(new[] { ',', '.' }).ToList<string>();
mylist.Sort(); int i;
foreach (var n in mylist)
{
    if (Int32.TryParse(n.Substring(n.IndexOf(' ')).Trim(), out i))
    {
        sortedAuthors += (n + ", ");
    }
    else
    {
        sortedTexts += (n + ", ");
    }
}
string final = sortedAuthors + ", " + sortedTexts;

这将输出

, 745:19-22, Arun 2012, 计算机网络, Dinesh 2012, Gopi 2010, Tata McGraw Hill,

我相信你可以处理剩下的。

于 2012-04-06T09:06:13.727 回答
0

首先,您必须在某个容器中获取要排序的字符串,例如 Array. 例如 string[] strings = s.Split(',')。请务必在您的案例中仅获取带有作者姓名的部分。然后您可以以任何方便的方式对结果数组进行排序,例如:Array.Sort(strings)。然后从它们创建新字符串: string newline = string.Join(",",strings) 并将它与你以前的 waht 连接起来。请记住,任何带有字符串修改的操作实际上都会产生新的字符串对象,因为字符串是不可变的,因此不可能进行任何“就地”排序

于 2012-04-06T09:08:51.507 回答
0

在你发现strAuthorslist你的任务很简单之后:

string[] strAuthorsPart = strPara.Split('.'); 
string[] strAuthorslist = strAuthorsPart[0].Split(','); 
strAuthorslist.Sort();
var newAuthorsArrangement = String.Join(strAuthorslist, ",");
var updatedLine = newAuthorsArrangement  + "." +
                  strPara.SkipWhile(x=>x!='.').ToString();

我使用了 .Net 4 SkipWhile方法,但您可以使用 .Net 1.1 简单地处理最后一部分

于 2012-04-06T09:48:19.910 回答