문제

단어 뒤집기 백준 17413번

리뷰

삽질하면서 배운것이 많은 문제.

  1. getline 함수와 cin.getline 함수가 다르다는 것을 배웠다!!

cin.getline( *char , 크기 ) 

cin.getline 함수는 <iostream> 에 속한 cin 의 멤버함수다. 

문자열 입력받는 12가지 방법을 아주 자세히 포스팅해주셨다. C++스러운 코드 문자열 입력받는 12가지 방법

#include <iostream>
using namespace std;


char C[10];
cin.getline(C, 10); // char* 인자와 입력받을 크기를 받는다. 

cin.getline(C, sizeof(C)); 

 

getline() 함수는 <string>에 속해 있어서 인자도 string을 받는다.

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

string st;
getline(cin, st);

// '\n' 개행문자가 나올 때 까지 입력받는다. 개행문자까지 입력받고 버퍼는 비운다. 
  1. 주의할 점

cin과 getline을 같이 쓸 때 주의할 점이 있다.

cin 이후에 버퍼를 비워주는 함수 cin.ignore() 를 실행해서 버퍼를 비워주고 난 후, getline()을 써야 한다.

cin은 띄어쓰기, 엔터, 탭은 출력하지 않지만 버퍼에 남아있다.

3. 그 외 힌트 얻은 질문 게시판 글

문자열 입력받을 때 파일의 끝인 EOF(이스케이프 시퀀스) 로 문자열이 끝난다.

문자열 입력받을 배열은 문제에 제한된 최대 크기보다 10정도 크게 잡는게 좋다.

getline 함수를 cin.getline() 함수로 수정하고, 띄어쓰기 출력 문제 조건문 처리를 수정하고나서야 맞출 수 있었다. 뿌듯했다.

코드

#include <iostream>
#include <string> // string을 인자로 받는 getline()
#include <cstring> //char* 를 인자로 받는 cin.getline()
#include <stack>
using namespace std;

// 단어뒤집기 2  

char S[100002];
stack<char> st;

int main(void){

    bool in_tag = false; // 현재 인덱스가 태그 안에/밖에 있는지 구분 

    cin.getline(S, sizeof(S));

      for(int i = 0; i < sizeof(S); i++){

         if(S[i]=='<'){ //태그 시작  

            in_tag = true; 

            if(!st.empty()){
                while(!st.empty()){
                    cout << st.top();
                    st.pop();
                }
            }    
        }

        if(S[i] == ' ' || S[i] == NULL){  // 공백만나면 스택비우기  

            while(!st.empty()){
                cout << st.top();
                st.pop();
            }

            if(S[i] == ' '){
                cout << ' ';
            }

        }else if(!in_tag){ // 일반- 큐에 넣기   

            char ch = S[i]; 
            st.push(ch);

        }else if(in_tag){ // 태그 내부 - 그대로 출력 

            cout << S[i];    

            if(S[i]=='>'){ // 태그 끝이면, in_tag가 끝났다고 바꿔주고 끝낸다. 
                in_tag = false; 
            }
        }

    }

    return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

테트로미노 백준 14500번  (0) 2020.09.03
오큰수 백준 17298번 c++  (0) 2020.09.03
암호 만들기 백준 1759번  (0) 2020.08.27
단어뒤집기 백준 9093번  (0) 2020.08.27
문자열 분석 백준 10820번  (0) 2020.08.27

+ Recent posts