C++/문제풀이

[C++] 문자열을 입력받아서 문자열에 포함된 모든 공백 문자를 삭제하는 프로그램

year.number 2022. 6. 15. 08:16

 

Power C++ p.296 12번

문자열을 입력으로 받아서 문자열에 포함된 모든 공백 문자를 삭제하는 코드를 작성해보자.

 

#include <iostream>
#include <cstring>
using namespace std;

// p.296 12번) 문자열을 입력으로 받아서 문자열에 포함된 모든 공백 문자를 삭제하는 코드를 작성해보자.

int main(){

    // 루핑을 돌며 맨 뒤에서부터 감소하다가 공백 문자를 만나면 앞으로 땡겨진다.
    cout << "\n\n공백 제거" << endl;
    
    char sentence[81];
    cout << "문장을 입력하세요: ";
    
    // cin >> sentence;    //단어 입력 OK, 문장입력 => 공백 문자 처리 불가(cin 객체)
    
    cin.getline(sentence, 81);
    
    //1. 문자열 맨 끝의 길이: 문자열의 length 구하기
    int length = strlen(sentence);
    cout << "입력된 문자열: " << sentence << endl;
    
    //2. 문자열 맨 끝에서부터 루핑을 돌면서 공백 탐지 -> 공백 발견 시 왼쪽으로 하나씩 이동
    
    for (int i = length; i>=0; i--){
    if (sentence[i] == ' ')
        for(int j = i; j < length; j++)
            sentence[j] = sentence[j+1];
        }
    
    cout << "공백이 제거된 문자열: " << sentence << endl;
    
    return 0;
    }

실행 결과


Key Point

1. 문자열 라이브러리 사용을 위해 #include <cstring> 추가

 

2.cin 객체 -> 단어 입력 OK, 문장입력 => 공백 문자 처리 불가

cin.getline(sentence, 81);으로 처리

 

3. 알고리즘

(1) 문자열 맨 끝의 길이 구하기 (문자열의 length 구하기)

strlen()이용

 

(2) 문자열 맨 끝에서부터 루핑을 돌면서 공백 탐지 -> 공백 발견 시 왼쪽으로 하나씩 이동

    for (int i = length; i>=0; i--){

    if (sentence[i] == ' ')

        for(int j = i; j < length; j++)

            sentence[j] = sentence[j+1];     // j+1번째에 있는 문자를 j번째(왼쪽으)로 이동

        }