Редакция для ASCII-профиль строки


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

1. Идея

Нужно пройти по строке слева направо и для каждого символа вывести:

  • сам символ;
  • его ASCII-код.

ASCII-код символа — это его числовое представление.
Например, для 'A' это 65, для '0' это 48, для '!' это 33.

Значит, задача сводится к простому перебору всех символов строки.

2. Наблюдения

  • Строка состоит только из печатных ASCII-символов без пробелов.
  • Нужно сохранить порядок символов, значит обрабатывать их надо именно слева направо.
  • Для каждого символа ответ независим от остальных символов.
  • В Python ASCII-код символа удобно получать через ord(c).
  • В C++ символ можно преобразовать к числу через приведение типа.

Пример: строка !~0Aa

Тогда по очереди получаем:

  • !33
  • ~126
  • 048
  • A65
  • a97

3. Алгоритм

  1. Считать строку s.
  2. Для каждого символа c в строке s:
    • вывести c;
    • вывести пробел;
    • вывести ASCII-код символа c.
  3. Каждый результат печатать на новой строке.

4. Почему это работает

По условию требуется для каждого символа строки вывести пару: сам символ и его ASCII-код.

Алгоритм перебирает все символы строки ровно по одному разу и в исходном порядке.
Для каждого символа он вычисляет его числовой код и сразу выводит нужную пару.

Значит:

  • ни один символ не пропущен;
  • порядок не нарушается;
  • для каждого символа выводится именно требуемая информация.

Следовательно, алгоритм корректно строит ASCII-профиль строки.

5. Сложность

Пусть длина строки равна n.

  • Время работы: O(n), потому что каждый символ обрабатывается один раз.
  • Дополнительная память: O(1), не считая памяти на хранение самой строки.

6. Код на C++17

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;

    for (char c : s) {
        cout << c << ' ' << (int)(unsigned char)c << '\n';
    }

    return 0;
}

7. Код на Python 3

s = input()

for c in s:
    print(c, ord(c))

Комментарии

Еще нет ни одного комментария.