C

[C] 문자열 처리

>hanul.dev2026.10.31 · 2 min read

c언어 과제 중 성적 등급 판단 코드를 짤 일이 있었는데, 문자열을 어떻게 처리해야 하는지 몰라 정리할 필요가 있다고 느꼈다.

밑의 코드는 성적을 조건별로 A, B, C, D, F로 분기하는 코드다. 여기서 각 등급을 +, -을 붙여 세분화하고 싶었다.

#include <stdio.h>

int main() {
    int score;
    char grade;

    printf("성적을 입력해주세요: ");
    scanf("%d", &score);

    if (score < 0 || score > 100) {
        printf("잘못된 점수입니다. 0에서 100 사이의 점수를 입력해주세요.\n");
    } else if (score >= 90) {
        grade = 'A';
    } else if (score >= 80) {
        grade = 'B';
    } else if (score >= 70) {
        grade = 'C';
    } else if (score >= 60) {
        grade = 'D';
    } else {
        grade = 'F';
    }

    printf("점수 %d는 %c 등급입니다.\n", score, grade);

    return 0;
}

C에서는 Java와 달리 String 타입이 없다. C에서 문자열은 다음과 같은 특징이 있다.

  1. 문자열은 char 배열이다.
  2. 문자열의 끝에는 널 문자 '\0'가 들어간다.
  3. 문자열을 출력할 때는 %s를 사용한다.

C에서는 문자열을 다루는 함수들이 별도로 <string.h> 헤더 파일에 정의되어 있다.

완성한 코드는 다음과 같다.

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

int main() {
    int score;
    char grade[3];

    printf("성적을 입력해주세요: ");
    scanf("%d", &score);

    if (score < 0 || score > 100) {
        printf("잘못된 점수입니다. 0에서 100 사이의 점수를 입력해주세요.\n");
    } else if (score >= 95) {
        strcpy(grade, "A+");
    } else if (score >= 90) {
        strcpy(grade, "A0");
    } else if (score >= 85) {
        strcpy(grade, "A-");
    } else if (score >= 80) {
        strcpy(grade, "B+");
    } else if (score >= 75) {
        strcpy(grade, "B0");
    } else if (score >= 70) {
        strcpy(grade, "B-");
    } else if (score >= 65) {
        strcpy(grade, "C+");
    } else if (score >= 60) {
        strcpy(grade, "C0");
    } else if (score >= 55) {
        strcpy(grade, "C-");
    } else if (score >= 50) {
        strcpy(grade, "D");
    } else {
        strcpy(grade, "F");
    }

    if (score >= 0 && score <= 100) {
        printf("점수 %d는 %s 등급입니다.\n", score, grade);
    }

    return 0;
}

strcpy()는 문자열을 복사하는 함수이다.

strcpy(grade, "A+")는 "A+"라는 문자열을 grade 배열에 복사한다는 의미이다.

이때 grade 배열에는 다음과 같이 저장된다.

  • grade[0] : 'A'
  • grade[1] : '+'
  • grade[2] : '\0'

strcpy()를 사용하지 않는다면 다음과 같이 배열의 각 요소에 문자를 개별적으로 대입해야 한다.

grade[0] = 'A';
grade[1] = '+';
grade[2] = '\0';

반응 · 댓글