본문 바로가기
C Programming

포인터를 활용한 대소문자 변경

by TYB 2023. 10. 14.
반응형
#if 1//poiniter를 활용한 대소문자 변경기능
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>

void string_check(char* input,int* total, int*upper, int*lower);

int main(void)
{
    char input[100];
    int  total;
    int  upper;
    int  lower;
   
    total=upper=lower=0;
   
    while(1)
    {
        printf("임의의 문자열을 입력(종료: exit): ");
        fgets(input,100,stdin);
        printf("초기data: %s\n", input);
        if(strncmp(input,"exit",4)==NULL)//input_buffer의 4글자가 exit일 경우 NULL값 부여 //4Byte 내용 비교하여 exit 
		{
			break;
		}
		else
		{
			total=strlen(input)-1;
     	  	string_check(input, &total,&upper,&lower);
        	// 대문자-->소문자 소문자 --> 대문자  
        	printf("변경data: %s\n", input);    
      	 	printf("총 글자수: %d\n", total);
      	  	printf("대문자 수: %d\n", upper);
      	  	printf("문자 수: %d\n", lower);
    	}
	}
    return 0;
}
void string_check(char* input,int* total, int*upper, int*lower)
{
   int i;
   for(i=0;i<*total;i++)
   {
   		if(isupper(*(input+i)))//대문자인 경우
		{
			*(input+i)+=0x20;//tolower(*(input+i))
			*upper+=1;
		}
		else
		{
			*(input+i)-=0x20;//tolower(*(input+i))
			*lower+=1;
		}  
   }
}
#endif

 

string.h에서 제공하는 tolower(), toupper() 함수를 사용하는 방법과

 

ASCII 코드를 활용해서   A라는 문자의 아스키 16진수 값 0x41과 a의 아스키 16진수 값 0x61의 차이  만큼 빼주면 

동작은 똑같이 된다.

반응형