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

C++로 문자열에서 특정 단어 제거하기

이 글에서는 문자열에서 주어진 단어를 제거하는 방법을 다룹니다. 예를 들어 다음과 같은 상황을 생각해 볼 수 있습니다.

입력 : str = "remove a given word", word = "remove"
출력 : "a given word"

입력 : str = "god is everywhere", word = "is"
출력 : "god everywhere"

문제 해결 접근 방법

문자열에서 단어를 제거하는 가장 간단한 방법은 다음과 같습니다.

  • 먼저 주어진 문자열을 2차원 배열(행렬) 형태로 변환합니다. 이때 각 단어는 행렬의 한 행에 저장됩니다.
  • 행렬에서 제거하려는 단어를 찾으면, 해당 단어가 저장된 행을 널(null) 문자로 대체합니다.
  • 마지막으로 재구성된 문자열을 출력합니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
int remove_word (string str, char word[]) {
    char matrix[10][30];
    int i = 0, j = 0, k = 0, len1 = 0, len2 = 0;

    // 문자열의 각 단어를 2차원 배열의 행에 저장합니다.
    for (i = 0; str[i] != '\0'; i++) {
        if (str[i] == ' ') {
            matrix[k][j] = '\0';
            k++;
            j = 0;
        }else{
            matrix[k][j] = str[i];
            j++;
        }
    }
    // 문자열에서 단어를 찾아 해당 위치에 널 문자를 넣습니다.
    matrix[k][j] = '\0';
    j = 0;
    for (i = 0; i < k + 1; i++) {
        if (strcmp (matrix[i], word) == 0) {
            matrix[i][j] = '\0';
        }
    }

    j = 0;
    // 재구성된 문자열을 출력합니다.
    for (i = 0; i < k + 1; i++){
        if (matrix[i][j] == '\0')
            continue;
        else
            cout << matrix[i] << " ";
    }

    cout << "\n";
}

int main () {
    char str1[] = "remove a given word", word1[] = "remove";
    char str2[] = "god is everywhere", word2[]="is";
    // 함수를 호출하여 문자열에서 단어를 제거하고 출력합니다.
    remove_word (str1, word1);
    remove_word (str2, word2);

    return 0;
}

실행 결과

a given word
god everywhere

코드 설명

  • 문자열과 배열을 초기값으로 설정한 뒤, 단어를 제거하는 함수를 호출합니다.
  • 반복문을 사용해 문자열의 각 단어를 2차원 배열의 각 행에 저장합니다. 공백을 만날 때까지 문자 하나씩 저장하다가 공백이 나오면 다음 행으로 넘어갑니다.
  • strcmp() 함수를 사용해 각 행의 단어와 제거할 단어를 비교하고, 일치하는 경우 해당 행에 널 값을 넣어 무효화합니다.
  • 마지막으로 행렬의 각 행을 순서대로 출력하여 최종 문자열을 완성합니다.

마무리

이번 글에서는 문자열을 2차원 배열에 저장한 뒤, 제거하려는 단어를 널 값으로 대체하는 방식으로 문자열에서 특정 단어를 삭제하는 문제를 해결했습니다. C++ 코드로 구현했지만, 동일한 로직은 C, Java, Python 등 다른 프로그래밍 언어로도 충분히 구현할 수 있습니다. 이 글이 여러분의 학습에 도움이 되기를 바랍니다.