Помогите! Нужно проверить: является ли цифры в числе неповторимыми, если да, то вывести это число. c#

Рейтинг: -2Ответов: 2Опубликовано: 20.03.2023
internal class Program
{
    static void Main(string[] args)
    {
        string number = Console.ReadLine();
        int tempNum = 0;

        if (Sort(number, tempNum) == true)
            Console.WriteLine($"программа выполнена успешно, ваше число: {number}");
        else 
        {
            Console.WriteLine("Ваше число повторяется, введите разные цифры.");
        }
    }

    static bool Sort(string number, int tempNum)
    {
        for (int i = 1; i<number.Length; i++)
        { 
            if (number[i] != number[tempNum])
            {   
                tempNum = number[i];
            }
            else 
            {
                return false;
            }
        }
        return true;
    }
}

Вот мой код, я решил делать это через массив. Не знаю верно ли выбрал путь, но выводит ошибку System.IndexOutOfRangeException: "Индекс находился вне границ массива."

Ответы

▲ 0
internal class Program
{
    static void Main(string[] args)
    {
        string enteredString = Console.ReadLine();
        //Проверяем что ввели числовое значение
        var isNumeric = int.TryParse(enteredString , out int n);
        if (!isNumeric)
        {
            Console.WriteLine($"Введено неверное значение. Введите число.");
        }
        else
        {
            if (UniqueCharactersInAString(enteredString))
            {
                Console.WriteLine($"Программа выполнена успешно, ваше число: {enteredString}");
            }
            else 
            {
                Console.WriteLine("Цифры в введённом числе повторяются, введите разные цифры.");
            }
        }
    }    
    //Проверяет уникальность каждого символа в строке(что символ не дублируется)
    static bool UniqueCharactersInAString(string originalString)
    {
        foreach (char ch in originalString)
        { 
            if (originalString.Count(c => c == ch) > 1)
            {
                return false;
            }
        }
        return true;
    }
}
▲ 0

Такой вариант, использующий только "простые" средства в виде циклов и метода Char.IsDigit:

using System;

class Program
{
    static void Main(string[] args)
    {
        string number = Console.ReadLine();

        Console.WriteLine(OnlyUniqueDigits(number) 
            ? $"программа выполнена успешно, ваше число: {number}"
            : "Неправильный ввод, введите разные цифры."
        );
    }

    static bool OnlyUniqueDigits(string number)
    {
        for (int i = 0, n = number.Length; i < n - 1; i++)
        { 
            if (!Char.IsDigit(number[i])) {   // найден нецифровой символ
                return false;
            }
            for (int j = i + 1; j < n; j++) {
                if (number[i] == number[j]) { // найден дубликат
                    return false;
                }
            }
        }
        return true;
    }
}