2012-01-26 3 views
0

나는 사용자 입력에 관계없이 대소 문자와 공백을 카운트하는 프로그램을 처음부터 코딩했습니다. 그때부터 그 특정 기능에 대한 코드가 이미 다른 라이브러리에 미리 작성되어 있다는 것을 알았습니다! 내 질문은 내가 아래에 작성한 모든 코드가 ctype.h에 정의되어C에서 다른 라이브러리 사용

isupper(int c), islower(int c)isspace(int c)의 사용을 단순화 할 수있는 방법이다.

#include <stdio.h> 

int main(void){ 
int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0; 

printf("Please enter a phrase:\n\n"); 

while((iochar=getchar())!=EOF) 
{ 
    if ((iochar==' ')||(iochar=='\t')||(iochar=='\n')) 
    { 
     numwhites++; 
     putchar(iochar); 
    } 
    else 
     if((iochar>='0')&&(iochar<='9')) 
     { 
      numdigits++; 
      putchar(iochar); 
     } 
     else 
      if(('a'<=iochar)&&(iochar<='z')) 
      { 
       numlower++; 
       putchar(iochar-32); 
      } 
      else 
       if(('A'<=iochar)&&(iochar<='Z')) 
       { 
        numupper++; 
        putchar(iochar); 
       } 
       else 
        putchar(iochar);  
} 

printf("%d white characters, %d digits, ",numwhites,numdigits); 
printf("%d lowercase have been converted to ",numlower); 
printf("uppercase and %d uppercase.\n",numupper); 

printf("\n\n"); 


return 0;} 

답변

5

는 더 나은 기록되고 정리되어

#include <stdio.h> 
#include <ctype.h> 

int main(int argc, char **argv) { 
    int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0; 

    printf("Please enter a phrase:\n\n"); 

    while ((iochar=getchar()) != EOF) { 
     // increase counts where necessary 
     if (isspace(iochar)) { 
      numwhites++; 
     } else if (isdigit(iochar)) { 
      numdigits++; 
     } else if (islower(iochar)) { 
      numlower++; 
      iochar = toupper(iochar); 
     } else if (isupper(iochar)) { 
      numupper++; 
     } 

     // this happens always, don't put it in the if's 
     putchar(iochar); 
    } 

    printf("%d white characters, %d digits, ", numwhites, numdigits); 
    printf("%d lowercase have been converted to ", numlower); 
    printf("uppercase and %d uppercase.\n", numupper); 

    printf("\n\n"); 

    return 0; 
} 
+0

우수한. 지금은 훨씬 깨끗해 보입니다. 고맙습니다! isupper() 및 다른 함수의 코드를 실제로 읽을 수있는 곳은 어디입니까? – user1145538

+0

거의. 문자가 소문자이면 인쇄 할 때 대문자로 변환해야합니다. –

+0

@Sani Huttunen : 아, 그걸 건너 뛰었습니다. 내가 고칠 수있게 해줘. – orlp

1

그냥 #include <ctype.h>입니다.

if((iochar==' ')||(iochar=='\t')||(iochar=='\n')) 

자세한 내용은

if (isspace(iochar)) 

에이 man ctype를 참조하십시오.

다음
관련 문제