Algorithm/APS

[APS] 1. 문자열(String)

개발자 뭄뭄 2022. 8. 13. 22:48
반응형

1. 컴퓨터에서의 문자표현

컴퓨터에서 문자 ‘A’는 어떻게 메모리에 저장할까?

네트워크가 발전되기 전, 미국에서는 각 지역 별로 코드체계를 정해놓고 사용했지만, 네트워크의 발전 이후 서로간 정보를 주고 받을 때 정보를 달리 해석한다는 문제가 생겼다. → 이러한 목적으로 ASCII (American Standard Code for Information Interchange)라는 문자 인코딩 표준이 제정되었다.

  • 표준 아스키 코드 vs 확장 아스키코드
    표준 아스키 코드확장 아스키 코드
    사용 비트7bit7bit
    표현가능표준 문자표준 문자, 악센트 문자, 도형 문자, 특수 문자, 특수 기호 … 등 128개
    교환서로 다른 프로그램이나 컴퓨터 사이에 교환 가능교환 불가
    마이크로컴퓨터 하드웨어 및 소프트웨어 사이에서 세계적으로 통용된다.프로그램이나 컴퓨터, 혹은 프린터가 해독할 수 있도록 설계되어 있어야만 올바로 해독할 수 있다.

미국 뿐만 아니라 전세계에서 컴퓨터가 발전하면서 각 국가들은 자국의 문자를 표현하기 위하여 코드체계를 만들어서 사용하게 되었다. → ASCII를 만들었을 때의 문제와 같은 문제가 국가간에 정보를 주고 받을 때 발생했다. → 다국어 처리를 위해 표준을 마련했다. 바로 유니코드

바이트 순서에 대해서 표준화하지 못하여, 유니코드의 적당한 외부 인코딩이 필요하다.

→ UTF (Unicode Transformation Format)

ex) UTF-8(in web), UTF-16(in windows, java) UTF-32(in unix)…

2. python 에서 문자열 처리

문자열

  • 시퀀스 자료형(순서가 있다.) → 시퀀스 자료형에서 사용가능한 ‘인덱싱, 슬라이싱’ 연산자 사용가능.
  • 메소드 : replace(), split(), isalpha(), find()
  • 변경불가(immutable) : 튜플과 마찬가지로 요소값을 변경할 수 없다.

3. 문자열 연습문제

  1. 문자열 뒤집기
    def my_swap(a):
        n = len(a)
        string_list = list(a)
        for i in range(n//2):
            string_list[i],string_list[n-1-i] = string_list[n-1-i],string_list[i]
        return "".join(string_list)
    
    def my_swap_2(a):
        n = len(a)
        new_string = ""
        for i in range (n-1,-1,-1):
            new_string += a[i]
        return new_string
    
    print(my_swap("Hello World!")) #!dlroW olleH
    print(my_swap_2("Hello World!")) #!dlroW olleH
  1. 문자열 비교
    1. python에서는 (>,<) 사용 시 자동적으로 아스키코드 값으로 비교한다. 만약 첫번째 문자의 아스키코드 값이 같으면, 자동으로 두번째 요소로 넘어간다.
    def my_strcmp(str1, str2):
        if str1 < str2:
            return -1 # str1 이 사전순으로 앞서면 (아스키코드 값이 더 작으면) -1을 출력
        elif str1 > str2:
            return 1
        else :
            return 0
  1. 문자열 숫자를 정수로 변환하기
    1. int()

      문자열숫자(’123’) 을 정수 (123)으로

      def s_to_i(string1):
          # 입력받은 문자열을 아스키코드 (ord)를 이용해서 숫자로 변환한다
          # 예를 들어 '123' 이 들어온 경우, 문자열은 순회 가능하므로
          # 1, 2, 3이 차례로 들어온다.
          # ord의 차를 이용하면, 숫자를 구할 수 있다.
          i = 0
          for x in string1:
              i = i*10 + ord(x) - ord('0')
          return i
      
      print(s_to_i('123'))
    1. str()

      정수(123)을 문자열(’123’)으로

      def i_to_s(integer):
          # 입력받은 정수를 아스키코드(chr)을 이용해서 문자열로 변환한다.
          # 예를 들어 123이란 정수가 들어온 경우, 10으로 나누고 나머지를 더하는 과정을 통해서
          # 빈 문자열에 더한다. 그러면 321 이 나오게 되므로
          # 역으로 뒤집는 과정을 마지막에 넣는다.
          i = ""
          while integer > 0:
              i += chr(ord('0') + integer%10)
              integer = integer//10
          return i[::-1]
      
      print(i_to_s(123))

Uploaded by N2T

반응형