2012-04-06 3 views
0

Добрый день,Как поменять две строки в одной строке в алфавитном порядке?

Я хочу поменять местами две строки в одной строке, основанной на ее алфавитном порядке.

Пример:

Arun 2012, Gopi 2010, Динеш 2012. Компьютерные сети, Tata McGraw Hill. 745: 19-22

В этой строке имена авторов Вероятно, Арун, Динеш, Гопи должны поменяться в алфавитном порядке и сохранены в одном файле для справки.

Как можно поменять массив строк?

Вот что я пробовал:

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

Благодаря DeeGo.

+1

Как вы узнаете, как строки разделены, а какая из строк - это имена? В вашем примере компьютерные сети появятся между Arun 2012 и Dinesh 2012. –

+0

Позвольте мне объяснить мои требования. У меня есть файл слов, который содержит ссылки на автора. При этом некоторая ссылка может быть изменена (в случае множественного автора) неправильно.Я хочу поменять имя автора и внести изменения в алфавитном порядке. – DeeGo

+0

Значит, ваша ожидаемая строка вывода будет какой? Потому что в приведенной выше строке есть 2 разделителя, и вам нужно будет знать, что вам нужно делать с ними. И что ты пробовал сам? – anothershrubery

ответ

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, гопи 2010, Тата 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, гопи 2010, Tata McGraw Hill,

Я считаю, что вы можете справиться с отдых.

+0

Ты, кажется, раскалываешься на пространствах? –

+0

Был немного в спешке, но обновил код сейчас. –

+0

Г-н Листер, Да, в приведенном выше кодексе я разделил автора ссылок с помощью (.) Пробелов полной (,) запятой и() – DeeGo

0

Сначала вы должны получить строки, которые вы сортируете в каком-то контейнере, например, в массиве. Например, строка [] strings = s.Split (','). Обязательно получите только часть с именами авторов в вашем случае. Затем вы можете отсортировать массив результатов любым удобным способом, например: Array.Sort (строки). Затем создайте из них новую строку: string newline = string.Join (",", string) и сравните ее с waht, который у вас был раньше. Помните, что любые операции с струнными модификациями на самом деле производят новый объект строки, потому что строки являются неизменными, так что никакого вида «на месте» такой не возможен

+0

В моих данных Каждый массив строк (Имя автора) разделяется запятой (,) и заканчивается на (.) полная остановка в конце автора для всех ссылок – DeeGo

+0

Спасибо за ваше своевременное предложение – DeeGo

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

+0

Я работаю над этим. – DeeGo

+0

@DeeGo, Если это работает, вы можете отметить это как ответ. –

Смежные вопросы