C language 문자함수를 문자열에 사용 2020/12/07 22:01 by The 2nd

문장을 입력받아 대문자로 모두 바꾸고, 부호를 카운트한다.


#define _CRT_SECURE_NO_WARNINGS
#define NUM_LIMIT 1024
#include <stdio.h>
#include <string.h> // strcmp()
#include <ctype.h> // toupper(), ispunct()...

/* selection sort : https://www.geeksforgeeks.org/selection-sort/ */

void Toupper(char*); //대문자로 바꿀 함수. 포인터를 통한 값 변경이라 반환이 없다
int PunctCount(const char*);  //특수문자를 카운트해서 개수를 반환할 함수

int main()
{
    char line[NUM_LIMIT];  //1024길이의 line 배열
    char* new_line = NULL;
    fgets(line, NUM_LIMIT, stdin);  //표준입력(키보드)으로 1024길이의 line 배열에 값을 받는다
    new_line = strchr(line, '\n'); // 입력받은 line 배열에서 첫번째 뉴라인 문자의 주소(포인터)를 new_line에 저장

    if (new_line)  //new_line변수가 NULL이 아니면 
        * new_line = '\0';  // new_line이 가리키는 주소의 값을 \0으로 변경

    Toupper(line);  // \n이 \0으로 대체된 line 문자열을 Toupper 함수로 전달
    puts(line); //line배열변수를 출력
    printf("%d\n", PunctCount(line)); //

    return 0;
}

void Toupper(char* str)  
{
    while (*str)  // \0이 아닐때까지 계속 돌면서
    {
        *str = toupper(*str); //str주소의 값을 대문자로 변경
/*
*아래는 대문자면 소문자로, 소문자는 대문자로 변경할 경우
        if (islower(*str))
            *str = toupper(*str);
        else if (isupper(*str))
            *str = tolower(*str);
*/
        str++;  // 확인할 주소를 하나씩 증가
    }
}

int PunctCount(const char* str)
{
    int ct = 0;
    while (*str) // \0이 아닐때까지 계속 돌면서
    {
        if (ispunct(*str)) //str 주소의 값이 특수문자이면 
            ct++;  // 카운트(ct)를 1씩 증가
        str++;  // 확인할 주소를 하나씩 증가
    }
    return ct;  // 카운트를 반환
}



---------------------------------------------------------------
How old are You???
HOW OLD ARE YOU???
3

덧글

댓글 입력 영역