문제
리뷰
삽질하면서 배운것이 많은 문제.
-
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' 개행문자가 나올 때 까지 입력받는다. 개행문자까지 입력받고 버퍼는 비운다.
-
주의할 점
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 |