문타쿠, 공부하다.
[C언어 코딩 도장] Unit 46. 문자열과 숫자를 서로 변환하기 본문
46.1 문자열을 정수로 변환하기
문자열을 정수로 바꾸려면?
-> atoi 함수를 사용 + stdlib.h 헤더 파일에 선언되어 있음
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* s1 = "283"; // 283은 문자열
int num1;
num1 = atoi(s1); // 문자열을 정수로 변환하여 num1에 할당
printf("%d\n", num1);
return 0;
}
* 문자열은 정수로 되어 있어야 하며 알파벳, 특수문자가 포함되면 해당 문자부터는 변환 ㄴㄴ
* 처음부터 숫자가 아니면 0으로 변환
283a -> 283
283a30 -> 283
283! -> 283
283!30 -> 283
a30 -> 0
!30 -> 0
acc -> 0
!@# -> 0
46.2 특정 진법으로 표기된 문자열을 정수로 변환하기
특정 진법으로 표기된 문자열을 정수로 변환하려면?
-> strtol 함수 사용 + stdlib.h 헤더 파일에 선언되어 있음
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* s1 = "0xaf10"; // 0xaf10은 문자열
int num1;
// 16진법으로 표기된 문자열을 정수로 변환하여 num1에 할당
// strtol(문자열, 끝포인터, 진법)
num1 = strtol(s1, NULL, 16);
printf("%x, %d\n", num1, num1);
return 0;
}
strtol 함수의 두 번째 인수(끝 포인터) 활용하기
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* s1 = "0xaf10 42 0x27c 9952";
int num1;
int num2;
int num3;
int num4;
char* end; // 이전 숫자의 끝부분을 저장하기 위한 포인터
num1 = strtol(s1, &end, 16);
num2 = strtol(end, &end, 10);
num3 = strtol(end, &end, 16);
num4 = strtol(end, NULL, 10);
printf("%x\n", num1);
printf("%d\n", num2);
printf("%x\n", num3);
printf("%d\n", num4);
return 0;
}
46.3 문자열을 실수로 변환하기
문자열을 실수로 바꾸려면?
-> atof 함수를 사용 + stdlib.h 헤더 파일에 선언되어 있음
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* s1 = "35.283672"; // 35.283672은 문자열
float num1;
num1 = atof(s1); // 문자열을 실수로 변환하여 num1에 할당
printf("%f\n", num1);
return 0;
}
* 문자열은 실수로 되어 있어야 하며 알파벳, 특수문자가 포함되면 해당 문자부터는 변환 ㄴㄴ
* 처음부터 숫자가 아니면 0.000000으로 변환
35.283672f -> 35.283672
35.2836f72 -> 35.283600
35.283672! -> 35.283672
35.2836!72 -> 35.283600
a35.283672 -> 0.000000
!35.283672 -> 0.000000
abc -> 0.000000
!#@ -> 0.000000
단, 다음과 같이 알파벳 e를 사용하여 지수 표기법으로 된 문자열도 실수로 바꿀 수 있다.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* s1 = "3.e5"; // 3.25는 문자열
float num1;
num1 = atof(s1);
printf("%e, %f\n", num1, num1);
return 0;
}
만약 소수점과 지수 표기법이 섞인 여러 개의 실수로 된 문자열을 실수로 변환하려면?
-> strtof 함수 사용 + stdlib.h 헤더 파일에 선언되어 있음
-> 문자열을 double형 실수로 변환하는 strtod 함수도 있음
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* s1 = "35.283672 3.e5 9.281772 7.e-5";
float num1;
float num2;
float num3;
float num4;
char* end;
num1 = strtof(s1, &end);
num2 = strtof(end, &end);
num3 = strtof(end, &end);
num4 = strtof(end, NULL);
printf("%f\n", num1);
printf("%e\n", num2);
printf("%f\n", num3);
printf("%e\n", num4);
return 0;
}
46.4 정수를 문자열로 변환하기
정수를 문자열 형태로 변환하려면?
-> sprintf 함수를 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char s1[10];
int num1 = 283;
sprintf(s1, "%d", num1);
printf("%s\n", s1);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char s1[10];
int num1 = 283;
sprintf(s1, "0x%x", num1);
printf("%s\n", s1);
return 0;
}
46.5 실수를 문자열로 변환하기
실수를 문자열 형태로 변환하려면?
-> 마찬가지로 sprintf 함수를 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char s1[10];
float num1 = 38.972340f;
sprintf(s1, "%f", num1);
printf("%s\n", s1);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char s1[20];
float num1 = 38.972340f;
sprintf(s1, "%e", num1);
printf("%s\n", s1);
return 0;
}
'C언어 > C언어 코딩 도장' 카테고리의 다른 글
[C언어 코딩 도장] Unit 47. 회문 판별과 N-gram 만들기 (0) | 2023.10.03 |
---|---|
[C언어 코딩 도장] Unit 46. 연습문제 및 심사문제 (0) | 2023.10.03 |
[C언어 코딩 도장] Unit 45. 연습문제 및 심사문제 (0) | 2023.10.02 |
[C언어 코딩 도장] Unit 45. 문자열 자르기 (0) | 2023.10.02 |
[C언어 코딩 도장] Unit 44. 연습문제 및 심사문제 (0) | 2023.10.02 |