Если буквы в строке упорядочены по алфавиту, то вывести 0 - C#

Узнай цену своей работы

Формулировка задачи:

Знаю что такая тема уже была, но в ней не было подробного ответа. Задание: Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по алфавиту, то вывести 0. В противном случае вывести номер первого символа строки, нарушающего алфавитный порядок. Для начала сделал так:
public void Sorted(string DataSort) //Сортировка введенных символов на цифры и буквы.
        {
            char temp;
            foreach (char ch in DataSort)
            {
                if (char.IsDigit(ch))
                {
                    Number[KeepDigit] = ch;
                    KeepDigit++;
                }
                if (char.IsLetter(ch))
                {
                    Letter[KeepLetter] = ch;
                    KeepLetter++;
                }
            }
        }
Далее работаю только с массивом куда были записаны все буквы. (Есть еще вторая часть задания где нужно будет работать с числами, её пока не трогаю)
//В методе Task реализуется выполнение задания.
        public void Task()
        {
            //Проверка букв на алфавитный порядок
            Sorted(Data);
            char FirstSymb = 'a';
            {
                for (int i = 0; i < Letter.Length-1; i++)
                {
                    if (Letter[i] == FirstSymb)
                    {
                        FirstSymb++;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if ((FirstSymb - 97) == KeepLetter)
            {
                this.Result = Convert.ToString("0");
            }
            else
            {
                this.Result = Convert.ToString(Letter[FirstSymb-97]);
            }
Result //Использую для вывода на экран в "label" позже
После запуска и некоторых тестов следующие проблемы: 1)Выводит 0 только если алфавитный порядок начат с «а». Если ввести «bcd» выдаст «b», а не «0» 2) Если ввести «12a33b5c», то в первый раз покажет, что порядок алфавитный, а второй раз выдаст «а» (Я так понимаю нужно обнулять массив каждый раз) Так же я не понимаю как именно реализовать: "В противном случае вывести номер первого символа строки, нарушающего алфавитный порядок." Ведь если в строке есть еще и цифры, то нужно учитывать при выводе и их. Буду благодарен за любые объяснения и подсказки. P.S Не кидайте тапки, автор глупый студент.

Решение задачи: «Если буквы в строке упорядочены по алфавиту, то вывести 0»

textual
Листинг программы
static void Main(string[] args)
        {
            string str = "1q1w2y12".ToLower();
            char tmp = ' ';
            bool flag = true;
 
            Console.WriteLine(str);
 
            for (int i = 0; i < str.Length; i++)
            {
                if (!(char.IsDigit(str[i])))
                {                   
                    if (tmp <= str[i])
                    {
                        tmp = str[i];
                    }
                    else
                    {
                        Console.WriteLine("Последовательность нарушена на {0} символе в строке", i + 1);
                        flag = false;
                        break;
                    }
                }
            }
 
            if (flag == true)
            {
                Console.WriteLine("Последовательность алфавита НЕ нарушена");
            }
 
            Console.ReadKey();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы