Задача 3 от Лекцията за Масиви
Условие: Напишете програма, която да сравнява лексикографски два char масива (буква по буква).
using System; class CompareTwoCharArrays { static void Main() { Console.WriteLine("Please enter the first char elements:"); string firstChars = Console.ReadLine(); char[] firstArray = firstChars.ToCharArray(); //convert string to char array int firstArrayLength = firstArray.Length; //gets length of the first array
Първата стъпка е да получим двата масива, като преобразуваме въведения текст към char масиви, с използването на метода ToCharArray();
Console.WriteLine("Please enter the second char elements:"); string secondChars = Console.ReadLine(); char[] secondArray = secondChars.ToCharArray(); int secondArrayLength = secondArray.Length; int minLen = Math.Min(secondArrayLength, firstArrayLength); //gets min length of the two arrays
Следващата стъпка е да сравним дължината на двата получени масива, като в for цикъл ще използваме по-малката дължина, за да обхождаме еднаквите индекси и да сравняваме двойките букви (символи). Ако вземем по-голямата дължина за крайна във for цикъла, ще получим грешка при изпълнение на програмата.
Създавам и булева променлива, като я инициализирам със стойност true, т.е. приемам, че символите от двата масива са еднакви. Тази променлива ще ме подпомогне при извеждане на правилния резултат.
bool equalCharArrays = true; // a kind of flag, helps to print the correct output for (int i = 0; i < minLen; i++) { if (firstArray[i] == secondArray[i]) { continue; }
Ако съответните елементи на двата масива са еднакви, булевата променлива за еднаквост остава истина, и с оператора continue продължавам изпълнението на for цикъла, т.е. сравнението на останалите символи.
Ако съответните елементи не са еднакви, то булевата променлива за еднаквост се променя на
false, и правя сравнение лексикографски кой от символите е преди другия.
else { equalCharArrays = false; if (firstArray[i] < secondArray[i]) { Console.WriteLine("The first char array is lexicografically before the second."); } else { Console.WriteLine("The second char array is lexicografically before the first."); } break; } }
For цикъла е завършил.
Ако булевата променлива е false, то резултатът вече е отпечатан на конзолата. Остават случаите, в които булевата променлива equalCharArrays е true. Сравнявам дължината на двата масива. Ако са еднакви, масивите са еднакви. Ако не са еднакви, извеждам резултат, кой от масивите е лексикографски преди другия.
if (equalCharArrays == true && firstArrayLength < secondArrayLength) { Console.WriteLine("The first char array is lexicografically before the second."); } else if (equalCharArrays == true && firstArrayLength > secondArrayLength) { Console.WriteLine("The second char array is lexicografically before the first."); } else if (equalCharArrays==true && firstArrayLength==secondArrayLength) { Console.WriteLine("The arrays are equal."); }
На този линк може да намерите целия код за задачата.
Здравей, имам едно предложение – в цикъла, където проверяваме дали единия елемент е еднакъв с втория може да проверяваме дали е различен (!=) – тогава ще отпадне нуждата от това continue.
http://pastebin.com/wXtKPRrV
Pingback: C# част II « Let's Learn Together