• 2022. 5. 20.

    by. 데브촙

    반응형

    문자열을 정수로 변환해 사용하기

    gets 함술 입력 받은 숫자는 정수가 아닌 문자열로 인식됨

    gets 함술 입력 받은 두 개의 문자열을 가지고 덧셈 연산을 하려면 문자열을 정수 값으로 변환해서 사용해야 함

    int data = “12345”	// 문자열은 정수형 변수에 대입 불가
    “12345” + “100”		// 문자열 간의 덧셈 연산 불가

     

     

    1단계: 아스키코드 표를 이용해 문자열을 정수로 변환하기

    - 아스키코드 페이지

    - 숫자(0 ~ 9) 아스키 코드의 시작 값인 문자 ‘0’의 아스키코드 값을 각 숫자 형식 문자에서 빼면 정수 형태의 숫자로 변환됨

    ex)

    ‘0’ - ‘0’ => 48 48 => 0 : 문자 ‘0’이 숫자 0으로 변환

    ‘1’ - ‘0’ => 49 48 => 1 : 문자 ‘1’이 숫자 1으로 변환

    ‘2’ - ‘0’ => 50 48 => 2 : 문자 ‘2’이 숫자 2으로 변환

    ‘3’ - ‘0’ => 51 48 => 3 : 문자 ‘3’이 숫자 3으로 변환

     

     

    // 문자열 형식의 숫자를 정수로 변환하기
    #include <stdio.h>
    void main()
    {
    	// pos_num는 각 자릿수를 곱할 숫자, num은 정수로 변환될 숫자를 의미
    	int pos_num = 100, num = 0, temp_num;
    	// 정수로 변환할 문자열
    	char num_string[4] = “123”;
    
    	for(int i = 0; < i< 3; i++)
    	{
    		// 배열의 각 항목을 문자에서 정수로 변환
    		temp_num = num_string[i] - ‘0’;
    		// 정수화된 숫자에 자릿수에 해당하는 숫자를 곱해서 합산
    		num = num + temp_num * pos_num;
    		// 다음 자릿수를 구성하기 위해 10을 나눔. 100 -> 10 -> 1
    		pos_num = pos_num / 10;
    	}
    	printf(“ %s -> %d\n”, num_string, num);
    }
    // 길이제한 없이 문자열 형식의 숫자를 정수로 변환하기 (1)
    #include <stdio.h>
    void main()
    {
    	int pos_num = 1, num = 0, count;
    	char num_string[4] = “123”;
    	// 문자열의 길이를 구해서 count 변수에 저장
    	count = strlen(num_string);
    	// 문자열의 길이보다 1만큼 작게 반복
    	for(int i = 0; i< count –1; i++) pos_num = pos_num * 10;
    	char num_string[4] = “123”;
    
    	// 문자열 길이만큼 반복
    	for(int i = 0;  i< count; i++)
    	{
    		num = num + (num_string[i] - ‘0’) * pos_num;
    		pos_num = pos_num / 10;
    	}
    	printf(“ %s -> %d\n”, num_string, num);
    }

     

    2단계: 숫자 형식의 문자열을 정수로 만드는 좀 더 간단한 표현

    자릿수에 곱할 숫자를 미리 구성하지 않고 문자열 순서대로 각 문자를 정수로 만들면서 10을 곱하면 동일한 결과 값을 얻을 수 있다.

     기존에 사용한 연산 방식

    1 * 100 + 2 * 10 + 3 * 1

      1. 자릿수에 곱할 숫자를 미리 계산

      2. 1 * 100

      3. 100 + 2 * 10

      4. 120 + 3

     

     새롭게 사용할 연산 방식

     

    ((1 * 10) + 2)*1 + 3

      1. 1

      2. 1 * 10 + 2

      3. 12 * 10 + 3

     
    // 길이제한 없이 문자열 형식의 숫자를 정수로 변환하기 (2)_새롭게 사용할 연산방식 적용
    #include <stdio.h>
    void main()
    {
    	int num = 0; count = 0;
    	char num_string[4] = “123”;
    
    	// 문자열 끝날 때까지 반복
    	while(num_string[count] != 0)
    	{
    		num = num * 10 + (num_string[count] - ‘0’);
    		count++;	// 다음 문자로 이동
    	}
    	printf(“ %s -> %d\n”, num_string, num);
    }

     

    // gets 함수를 사용하여 두 개의 숫자를 입력 받아 합산하기
    #include <stdio.h>
    int ArrayToInteger(char string[])
    {
    	int count = 0; num = 0;
    	while(string[count] != 0)	
    	{
    		num = num * 10 + string[count] - ‘0’;
    		count++;
    	}
    	return num;
    }
    
    void main()
    {
    	int first_num, second_num;
    	char first_string[16], second_string[16];
    
    	printf(“input first number : ”);
    	gets(first_string);	// 첫 번째 문자열을 입력 받음
    	printf(“input second number : ”);
    	gets(second_string);	// 두 번째 문자열을 입력 받음
    
    	first_num = ArrayToInteger(first_string);
    	second_num = ArrayToInteger(second_string);
    	printf(“%d + %d = %d\n”, first_num, second_num, first_num + second_num);
    }

     

    3단계: atoi 함수를 사용하여 문자열을 정수로 변환하기

    - ArrayToInteger 함수와 같은 기능을 제공하는 함수가 C 언어 표준 라이브러리에서 제공하는 atoi 함수

    - atoi 함수를 사용하려면 stdlib.h 파일을 소스 파일에 include 해야 함

    #include <stdio.h>
    #include <stdlib.h>
    
    void main()
    {
    	int first_num, second_num;
    	char first_string[16], second_string[16];
    
    	printf(“input first number : ”);
    	gets(first_string);	// 첫 번째 문자열을 입력 받음
    	printf(“input second number : ”);
    	gets(second_string);	// 두 번째 문자열을 입력 받음
    
    	first_num = atoi(first_string);		// 문자열 -> 정수
    	second_num = atoi(second_string);	// 문자열 -> 정수
    	printf(“%d + %d = %d\n”, first_num, second_num, first_num + second_num);
    }
    반응형

    'C' 카테고리의 다른 글

    표준 입력 함수 scanf  (0) 2022.05.21
    표준 입력 함수  (0) 2022.05.19
    void * 형 포인터  (0) 2022.05.18