How to sort a string in the order: lowercase letters - uppercase letters - odd digits - even digits in C#

1 Answer

0 votes
using System;

/*
    We want to sort characters in this strict order:
    1. lowercase letters   (a–z)
    2. uppercase letters   (A–Z)
    3. odd digits          (1,3,5,7,9)
    4. even digits         (0,2,4,6,8)

    Strategy:
    ---------
    Assign each character a "category rank" and sort by:
        (category rank, natural character order)

    C# allows custom sorting using Array.Sort with a Comparison<char>.
*/

public class SortAlphaNumeric
{
    /// Returns category rank for sorting.
    /// Lower rank = comes earlier.
    static int Category(char c)
    {
        if (c >= 'a' && c <= 'z') return 0;   // lowercase
        if (c >= 'A' && c <= 'Z') return 1;   // uppercase

        if (char.IsDigit(c)) {
            int d = c - '0';
            return (d % 2 == 1) ? 2 : 3;      // odd digits → 2, even digits → 3
        }

        return 4; // fallback (should not happen for alphanumeric input)
    }

    /// Custom comparator for sorting characters
    static int CompareChars(char a, char b)
    {
        int ca = Category(a);
        int cb = Category(b);

        if (ca != cb)
            return ca - cb;   // sort by category first

        return a - b;         // tie-breaker: natural order
    }

    public static void Main()
    {
        string s = "a2B3cD8f1Z0";

        // Convert string to array of chars
        char[] arr = s.ToCharArray();

        // Sort using custom comparator
        Array.Sort(arr, (a, b) => CompareChars(a, b));

        // Build result string
        string result = new string(arr);

        Console.WriteLine("Sorted result: " + result);
    }
}



/*
run:

Sorted result: acfBDZ13028

*/

 



answered 13 hours ago by avibootz

Related questions

...