Game!




숫자 문자열을 진짜 숫자(상수)로 바꿔서 일의자리씩 더하고 출력하여보자



ex) 23sdgds1 을 입력한다면 2 + 3+ 1 = 6 을 출력해야한다.


1. 문자열을 gets 로 입력받는다.

2. 숫자 문자열일 경우 상수로 바꿔서 int형 변수에 저장한다.

3. int형 총합 변수를 출력한다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
void main()
{
    char str[20]; //
    int result = 0//
 
    printf("문자열 입력 : ");
    gets(str);
 
    for(int i=0; i<strlen(str); i++)
    {
        /* isdigit 함수 아래에 설명*/
        if(isdigit(str[i]) != 0)
            result += str[i] - 48;
       /* -48인 이유 아래에 설명 */
    }
 
    printf("숫자의 총 합 : %d", result);
}

cs



1. isdigit 함수의 의미


isdigit 함수는 인자로 받은 문자가 '0' ~ '9' 인지 판별하는 함수입니다.


이 함수를 사용하기 위해선 헤더파일 #include <ctype.h>을 추가해야합니다.


반환형은 


isdigit(str[i]) = 0 // 거짓으로 판단하여 str[i] 는 숫자 문자가 아님을 의미합니다

isdigit(str[i]) != 0 //참으로 판단하여 str[i] 는 숫자 문자입니다


출처 : http://forum.falinux.com/zbxe/index.php?document_srl=520899&mid=C_LIB



2. result += str[i] - 48 => - 48 의 의미


result 에는 숫자문자를 진짜 숫자로 바꿔서 저장해야합니다.


아스키코드 표를 참조하시면,

문자 숫자는 48~ 57 


그래서 '0' 일 경우 숫자는 48

'1'일 경우 숫자는 49 이므로


0을 저장하고 싶으면 48 - 48 = 0

1을 저장하고 싶으면 49 - 48 = 1


이렇게 이해할 수 있습니다.