Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 ASCII 값 문장을 해당 문자열로 변환하는 방법

이 튜토리얼에서는 ASCII 값으로 이루어진 문장을 그에 대응하는 문자열로 변환하는 프로그램을 C++로 구현하는 방법을 알아보겠습니다.

여기서는 ASCII 코드가 나열된 문자열이 입력으로 주어집니다. 우리의 목표는 주어진 숫자 시퀀스를 해석하여 각각의 ASCII 코드에 해당하는 문자로 변환한 뒤, 완성된 문자열을 출력하는 것입니다.

알고리즘 접근 방식

변환 과정은 다음과 같은 단계로 진행됩니다.

1. 입력 문자열을 한 글자씩 순회하면서 현재 자릿수를 누적하여 숫자를 만듭니다. 즉, num = num * 10 + (str[i] - '0') 연산을 통해 연속된 숫자를 하나의 정수로 조합합니다.

2. 조합된 숫자가 유효한 ASCII 범위(32~122)에 속하는지 확인합니다. 이 범위는 공백(32)부터 소문자 'z'(122)까지의 출력 가능한 문자를 포함합니다.

3. 범위 내에 있다면 해당 정수를 char 타입으로 캐스팅하여 문자로 변환하고 출력한 뒤, 누적값을 0으로 초기화해 다음 문자를 위한 준비를 합니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;

// ASCII 시퀀스를 문자열로 변환하는 함수
void convert_ASCII(string str, int len) {
    int num = 0;
    for (int i = 0; i < len; i++) {
        // 현재 자릿수를 누적하여 숫자를 확장
        num = num * 10 + (str[i] - '0');
        // 숫자가 유효한 ASCII 범위에 있는지 확인
        if (num >= 32 && num <= 122) {
            char ch = (char)num;
            cout << ch;
            num = 0;
        }
    }
}

int main() {
    string str = "104101108108111443211911111410810033";
    int len = str.length();
    convert_ASCII(str, len);
    return 0;
}

출력 결과

hello, world!

코드 설명

입력 문자열 "104101108108111443211911111410810033"은 다음과 같이 해석됩니다.

- 104 → 'h'
- 101 → 'e'
- 108 → 'l'
- 108 → 'l'
- 111 → 'o'
- 44 → ','
- 32 → ' '(공백)
- 119 → 'w'
- 111 → 'o'
- 114 → 'r'
- 108 → 'l'
- 100 → 'd'
- 33 → '!'

이처럼 각 숫자가 유효 범위에 도달할 때마다 문자로 변환되기 때문에, 두 자리와 세 자리 ASCII 코드가 섞여 있어도 올바르게 구분하여 처리할 수 있습니다. 최종적으로 "hello, world!"라는 문장이 출력됩니다.

시간 복잡도

이 알고리즘은 입력 문자열을 한 번만 순회하므로 시간 복잡도는 O(n)입니다. 여기서 n은 입력 문자열의 길이입니다.