Сравняване на char масиви

csharp

Задача 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.");
        }
 

На този линк може да намерите целия код за задачата.

2 Comments

Filed under Код на домашни

2 responses to “Сравняване на char масиви

  1. Здравей, имам едно предложение – в цикъла, където проверяваме дали единия елемент е еднакъв с втория може да проверяваме дали е различен (!=) – тогава ще отпадне нуждата от това continue.
    http://pastebin.com/wXtKPRrV

  2. Pingback: C# част II « Let's Learn Together

Leave a comment