문자와 문자열 처리 함수 연습문제2 열혈강의C

P_21_2_1.exe

Problem> 적당한 길이의 문자열을 입력받는다. 그리고 그 안에 존재하는 숫자들의 총 합을 계산한다. 예를 들어서 입력받은 문자열이 "ab15fe43" 이라고 하면 1+5+4+3=13 이므로 13을 출력해 준다.

 

Cording>

 

 

#include <stdio.h>
#include <string.h>

 

void main()
{
    char str[100];
    int sum=0, i, len;

 

    printf("문자열 입력 : ");
    gets(str);
    fflush(stdin);


    len = strlen(str);


    for(i=0; i<len; i++)
    {
        if(str[i]>='1' && str[i]<='9')
        {
            sum += str[i] - ('0'-0);
        }
    }

    printf("결과 : %d\n", sum);
}

 

 

 


문제 출처 : 열혈강의 C 프로그래밍 p475 연습문제21-2-1


덧글

  • 지나가는학생 2011/05/23 22:51 # 삭제 답글

    안녕하세요 주인장님~ 저는 C 열혈강의 공부하고 있는 학생입니다.
    이 문제를 해결하다가 중간에 막혀서 검색하고 찾아 들어왔습니다. 하나 궁금한 것이 있어요 ㅠㅠ
    ('0'-0)를 왜 빼신거죠?
    전 ('0'-0)를 빼준 것 빼고는 님과 거의 비슷하게 코딩을 했거든요...
    그랬더니 a123이런식ㅇ로 인식하면 123+23+3의 결과가 나오더라구요 ㅠㅠ
    숫자가 하나씩 인식이 안되고 연결되서 받아들여지던데.. 이걸 어떻게 처리해야할지 몰르는 상황이엇슴다
    ('0'-0)은 아스키코드상으로 0-48=-48아닌가요?
    힌트좀 자세하게 설명해주시면 감사하겠습니다 ㅠㅠ
  • 윤슬 2011/05/27 22:48 #

    에구, 너무 늦게 답글 달아드리는거 아닌지 모르겠네요~
    ('0'-0)을 빼준 이유는 char 타입을 int로, 즉 숫자로 바꿔주기위해서예요~
    입력을 문자열로 받기 때문에 str 배열에는 한 칸마다 char 타입의 "문자"가 들어있잖아요
    예를 들면 그 칸에 5가 있다고 해도 int타입의 "숫자" 5가 아닌 "문자" 5가 들어있겠죠 (아스키코드로)
    문자 5 에대한 아스키코드가 105라고 한다면
    문자 0 에 대한 아스키코드는 100일 것이고
    (문자 5) - (문자 0) 을 해주면 우리가 원하는 실제 숫자 5를 얻을수 있어요 (105-100=5)
    만약 문자 0 ('0')을 안 빼주면 우리가 원하는 숫자 5가 아닌 105로 인식해버리겠쬬
    답이 되셨을지 모르겠네요 ^^
  • 지나가는학생 2011/06/06 10:35 # 삭제

    아! 우선 모르는 사람한테도 친절하게 답변 해주셔서 너무 감사합니다 ㅠㅠ
    덕분에 큰 도움이 됬어요 ㅠㅠ
    염치불구하고 몇개만 더 여쭤봐도 될까요....;;

    제는 처음에 이렇게 생각헀었거든요ㅎ
    숫자 5가 아닌 문자 5로서 아스키코드값을 통하여 계산하더라도
    최종결과를 printf의 %d서식으로 출력하면
    출력 결과로서 숫자로 변환된 올바른 계산값이 나오겠구나 싶었어요 ㅋ

    그런데 주인장님 설명듣고 잘못 알고있었다는걸 꺠달은게..
    문자상으로 5랑 6을 더하면 11이 되는게 아니었고
    (105+106=211이고 111과는 전혀 다른 수니까ㅋ)

    또, char형 배열에 ab123을 입력하면
    당연히 메모리상에는 a,b,1,2,3에 해당되는 아스키코드값으로 저장이 된다는거 까진 알았지만
    printf에서 %d로 받아 출력하면 a,b는 몰라도 1,2,3은 아스키코드가 출력되는 것이 아니라
    그대로 1,2,3이 출력될줄 알았거든요ㅎㅎ
    근데 실제로 각 문자들을 for문을 통해 %d형으로도 출력해보고 %c형으로도 출력해보니
    그게아니더라구요^^;
    말씀대로 char를 통해서 받은 5는 '문자로서의 5'가 되어
    %d 형식이 아닌 %c 형식을 통해서만 있는 그대로의 숫자가 나온다는걸 알게됬습니다
    제가 기초적이면서도 중요한 오해를 하고 있었네요 ㅋㅋ
  • 지나가는학생 2011/06/06 10:45 # 삭제

    그래서 여튼; 우리가 원하는 값으로 얻어내기 위해
    '문자 0'에 해당되는 아스키코드값을 뺴준다는 말의 의미를 파악했습니다ㅋㅋ
    -('0'-0)의 의미를요.. ㅎㅎ
    책에서는 48이라는.. 0에 해당되는 아스키코드값을 바로 뺴게끔했는데
    굳이 값을 찾아보거나 할 필요 없이 '0'을 이용해도 되겠네요ㅋ
    (