Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[C언어 코딩 도장] Unit 46. 문자열과 숫자를 서로 변환하기 본문

C언어/C언어 코딩 도장

[C언어 코딩 도장] Unit 46. 문자열과 숫자를 서로 변환하기

개발새발 문타쿠 2023. 10. 3. 01:07

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;
}