-
반응형
문자열을 정수로 변환해 사용하기
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