2014-12-14 6 views
0

저는 C++로 간단한 파서를 작성하고 있습니다. std::ws으로 공백을 제거하고 싶습니다.stringstream과 str이 동기화되지 않았습니다.

bool   Parser::readWhiteSpace() 
{ 
    std::cout << "Before : str=[" << this->_ss.str() << "], peek=[" << (char)this->_ss.peek() << ']'<< std::endl; 
    this->_ss >> std::ws; 
    std::cout << "After : str=[" << this->_ss.str() << "], peek=[" << (char)this->_ss.peek() << ']'<< std::endl;                                   

    return (true); 
} 

출력은 다음과 같습니다 스트림과 스트림에서 STR가 동기화되지 왜 이해가 안

Before : str=[ something], peek=[ ] 
After : str=[ something], peek=[s] 

. str에 영향을 미치지 않습니까?

+0

'str()'은 전체 버퍼를 반환하고 "get"포인터는 공백이 아닌 다음 문자로 간단히 이동하기 때문에 다음 읽기 때만 차이점을 볼 수 있습니다. – 0x499602D2

+0

함수 이름에서 앞에 오는 공백을 제거하는 것으로 시작할 수 있습니다! –

답변

2

문자열 스트림에는 "다음"문자를 가리키는 출력 위치 표시기 인 포인터가 있습니다. 선행 공백을 줄임으로써 배킹 버퍼 자체는 수정되지 않지만이 위치 표시기는 증가합니다. std :: ws는 ​​공백 문자가 될 때까지 문자를 읽습니다. 따라서 마지막 표시는 s을 가리키는이 표시기를 찾습니다.

관련 문제