수업일: 2025-09-16

목표: 문자열 다루기(문자 분류/대소문자 변환), 안전한 인덱싱(size_type), 범위기반 for(값/참조), vector(동적 배열/반복자/용량), 배열·포인터 선언 해석, C-스타일 문자열 상호운용을 직관적으로 이해하고 안전하게 코딩한다.


0) 큰 그림 한 장 요약


1) 문자열(string)과 문자 처리: “문장을 재료로 가공하기”

1-1. string이 안전한 이유

+---------------------+
|  'H' 'e' 'l' 'l' 'o' |
+---------------------+
 size()=5, empty()? false

1-2. 문장부호 세기 & 대문자 변환 (두 가지 순회법 비교)

#include <iostream>
#include <string>
#include <cctype>   // 문자 분류/변환
using namespace std;

int main() {
    string s = "Hello, World!!!";

    // [A] 값으로 순회(원본 불변)
    size_t punct_cnt = 0;
    for (char c : s) { // c는 복사본
        if (ispunct(static_cast<unsigned char>(c)))
            ++punct_cnt;
    }
    cout << "punct=" << punct_cnt << "\\n"; // 4

    // [B] 참조로 순회(원본 수정)
    for (char& c : s) {
        c = static_cast<char>(toupper(static_cast<unsigned char>(c)));
    }
    cout << s << "\\n"; // HELLO, WORLD!!!
}

unsigned char로 캐스팅하나요?