Как работать с символоми регистра в коде ASCII?

391
07 апреля 2017, 20:26

Всем привет! Я только начал изучать C# и в моём курсе обучения попалась такая вот задача, но к сожалению я не могу написать данную программу и поэтому прошу помощи у вас. Помогите пожалуйста с написанием данной программы:

"Числовые значения символов нижнего регистра в коде ASCII отличаются от значении символов верхнего регистра на величину 32. Следовательно, для конвертирования символа нижнего регистра и символ верхнего регистра необходимо вычесть из его значения число32. Используя эту информацию, напишите программу, которая читает символы, вводимые с клавиатуры. Программа должна конвертировать все символы нижнего регистра в символы верхнего регистра и наоборот, выводя на экран результат. При этом все остальные символы остаются неизменными. Программа должна прекращать работу, когда пользователь вводит символ точки (.). В завершение работы программа должна вывести информацию о количестве измененных символов."

Вопросы:

  1. а) Как вычесть число 32 при конвертиртации символов? б) Как должна выглядить строка кода?
  2. Как указать программе верхний регистр и нижний?

Заранее спасибо!

Обновление

Написал код рабочей программы, но мне не нравится что каждый символ результата отображается в новой строке.

Вопрос: Как отобразить символы результата в одной строке? Спасибо.

код программы:

using System;
class Ascii
{

public static void Main()
    {
    int down = 0;
    int up = 0;
    char symbolChar = ' ';
    Console.WriteLine("Vvedite text ispolzuya malenkie i bolshie bukvi");
    Console.WriteLine("\n");
    while (symbolChar != '.')
    {
        var symbol = Console.Read();
        if (symbol >= 65 && symbol <= 90)
        {
            symbol += 32;
            ++down;
        }
       else if (symbol >= 97 && symbol <= 122)
        {
            symbol -= 32;
            ++up;
        }
        symbolChar = Convert.ToChar(symbol);
        Console.Write(symbolChar);

    }
    Console.WriteLine("\n");
    Console.WriteLine("Kolichestvo izmenennih simvolov " + (down + up));
}
}
Answer 1

Вот вам набросок того, что должно быть.

class Program
{
    //для подсчета кол-ва измененных символов
    private static int _changedSigns;
    //для подсчета кол-ва введенных символов
    private static int _inputedSigns;
    static void Main(string[] args)
    {
        //вводимый символ
        ConsoleKeyInfo key;
        Console.WriteLine("Введите символ: ");
        do
        {
            //считываем
            key = Console.ReadKey();
            //увеличиваем счетчик введенных
            _inputedSigns++;
            string output = AnalizeAndChangeKey(key);
            Console.WriteLine();
            Console.WriteLine($"Получилось: {output}");
            Console.WriteLine("Введите еще символ: ");
        } while (key.Key != ConsoleKey.OemPeriod);
        Console.WriteLine();
        Console.WriteLine(new string('-', 10));
        Console.WriteLine($"Всего было введено символов: {_inputedSigns}");
        Console.WriteLine($"Всего было изменено символов: {_changedSigns}");
        Console.ReadKey();
    }
    private static string AnalizeAndChangeKey(ConsoleKeyInfo key)
    {
        //для результата
        string result = String.Empty;
        //если символ является буквой
        if (char.IsLetter(key.KeyChar))
        {
            int number = 0;
            char cRes;
            if (char.IsUpper(key.KeyChar))
            {
                //вычисляем по условию задачи
                number = key.KeyChar + 32;
                //преобразуем
                cRes = (char)number;
            }
            else // буква нижнего регистра
            {
                //вычисляем по условию задачи
                number = key.KeyChar - 32;
                //преобразуем
                cRes = (char)number;
            }
            //в результат
            _changedSigns++;
            result = cRes.ToString();
        }
        else
        {
            //выводим без преобразований
            result = key.KeyChar.ToString();
        }
        return result;
    }
}
READ ALSO
Как передать значения для полей класса, который объявляется через интерфейс

Как передать значения для полей класса, который объявляется через интерфейс

Заголовок скорей всего не передает сути вопросаИмеется два интерфейса:

297
StringSplitOptions.RemoveEmptyEntries сразу для нескольких методов Split

StringSplitOptions.RemoveEmptyEntries сразу для нескольких методов Split

ПриветствуюМожно ли использовать перечисление StringSplitOptions

289
Отправка смс на указанный номер ASP.NET MVC 5

Отправка смс на указанный номер ASP.NET MVC 5

Допустим есть форма на сайте, в нее вбивается телефон, затем по нажатию кнопки на указанный номер отправляется сообщение

311