Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문자열의 특정 단어를 별표(*)로 바꾸는 방법

C++ 프로그래밍에서 문자열에 포함된 특정 단어를 별표(*)로 대체하는 기능은 게시판 검열, 민감 정보 마스킹 등 실무에서 폭넓게 활용됩니다. 이 프로그램은 vector 클래스와 string 클래스의 핵심 기능을 활용해 원하는 결과를 손쉽게 얻도록 구성되어 있습니다.

알고리즘

START
    Step 1: 문자열을 입력받는다.
    Step 2: 문자열을 단어 단위로 분리하여 벡터(vector)에 저장한다.
    Step 3: 대체할 단어의 길이만큼 반복하며 별표(*)를 변수에 누적한다.
    Step 4: 벡터를 순회하며 각 단어를 대체 대상 단어와 비교한다.
    Step 5: 최종 결과를 출력한다.
END

아래 코드는 위 알고리즘을 바탕으로 작성되었습니다. 문자열 분리에는 <cstring> 헤더의 strtok() 함수를 사용하며, 분리된 단어들은 vector<string> 타입으로 저장·반환됩니다.

예제 코드

#include <cstring>
#include <iostream>
#include <vector>
#include <string.h>

// 문자열을 구분자 기준으로 분리하는 함수
std::vector<std::string> split(std::string str, std::string sep){
    char* cstr = const_cast<char*>(str.c_str());
    char* current;
    std::vector<std::string> arr;
    current = strtok(cstr, sep.c_str());
    while(current != NULL){
        arr.push_back(current);
        current = strtok(NULL, sep.c_str());
    }
    return arr;
}

int main(){
    std::vector<std::string> word_list;
    std::cout << "string before replace::" << "Hello ajay yadav ! you ajay you are star" << std::endl;
    std::cout << "word to be replaced::" << "ajay" << std::endl;

    word_list = split("Hello ajay yadav ! you ajay you are star", " ");
    std::string result = "";

    // 대체할 단어 길이만큼 별표(*) 검열 문자열 생성
    std::string stars = "";
    std::string word = "ajay";
    for (int i = 0; i < word.length(); i++)
        stars += '*';

    // 추출한 단어 목록을 순회하며 일치 여부 확인
    int index = 0;
    for (std::string i : word_list){
        if (i.compare(word) == 0)
            // 검열 대상 단어를 별표 문자열로 교체
            word_list[index] = stars;
        index++;
    }

    // 단어들을 공백으로 연결해 하나의 문자열로 결합
    for (std::string i : word_list){
        result += i + ' ';
    }

    std::cout << "output::" << result;
    return 0;
}

코드 주요 흐름

split() 함수: strtok()를 이용해 입력 문자열을 공백(" ") 기준으로 잘라내고, 각 단어를 vector<string>에 순차적으로 저장한 뒤 반환합니다. 모든 문자열 분리 로직이 이 함수에 캡슐화되어 있으며, main() 함수 실행 시 호출됩니다.

별표 생성: 대체할 단어 "ajay"의 길이(4)만큼 반복문을 돌려 "****" 문자열을 미리 만들어 둡니다.

단어 치환: 범위 기반 for문으로 단어 목록을 순회하며 compare() 메서드로 각 단어가 대상 단어와 일치하는지 확인하고, 일치하면 해당 위치의 값을 별표 문자열로 교체합니다.

결과 결합: 치환이 끝난 단어들을 다시 공백으로 이어 붙여 최종 문자열을 완성한 뒤 출력합니다.

실행 결과

String before replace::Hello ajay yadav ! you ajay you are star
Word to be replaced::ajay
Output::Hello **** yadav ! you **** you are star

실행 결과를 보면 문자열 안에서 "ajay"라는 단어가 두 번 등장했으며, 두 위치 모두 길이가 동일한 "****"로 성공적으로 대체된 것을 확인할 수 있습니다. 이 방식은 대체 단어의 길이만큼 정확히 별표를 생성하므로, 원본 문장의 구조와 가독성을 유지하면서 특정 단어만 깔끔하게 가릴 수 있다는 장점이 있습니다.