이미 몇 가지를 시도했지만
std::stringstream m;
m.empty();
m.clear();
둘 다 작동하지 않습니다.
답변
모든 표준 라이브러리 유형에서 멤버 함수 empty()
는 명령이 아니라 쿼리입니다. 즉 “비어 있습니까?” “내용을 버리지 마십시오”.
clear()
멤버 함수에서 상속 ios
및 파일 스트림이 에러 상태가 설정되어있는 경우 등, 스트림의 에러 상태를 해제하기 위해 사용된다 eofbit
(파일 끝) 다음 호출 clear()
에 에러 상태를 다시 설정한다 goodbit
(에러없이)를 .
의 내용을 지우려면 다음을 stringstream
사용하십시오.
m.str("");
다음을 사용하더라도 정확합니다.
m.str(std::string());
는 std::string
생성자를 호출하지 않기 때문에 기술적으로 더 효율적 const char*
입니다. 그러나 요즘의 모든 컴파일러는 두 경우 모두 동일한 코드를 생성 할 수 있어야하므로 더 읽기 쉬운 것을 사용하십시오.
답변
오류 상태를 지우고 문자열 스트림을 모두 한 줄에 비울 수 있습니다.
std::stringstream().swap(m); // swap m with a default constructed stringstream
이것은 효과적으로 m을 기본 구성 상태로 재설정합니다
답변
m.str("");
작동하는 것 같습니다.
답변
컴파일러와 상관없이 가장 안정적인 방법이어야합니다.
m=std::stringstream();
답변
나는 항상 그것을 범위 내고있다 :
{
std::stringstream ss;
ss << "what";
}
{
std::stringstream ss;
ss << "the";
}
{
std::stringstream ss;
ss << "heck";
}
답변
내 2 센트 :
이것은 xcode 및 dev-c ++에서 저에게 효과적 인 것처럼 보였습니다. 사용자 요청에 따라 반복적으로 실행하면 문자열 스트림 변수를 채워 코드가 처음 작동 할 때 메뉴 형식의 프로그램이 있습니다. 다음 번에 사용자가 동일한 코드를 실행할 때 문자열 스트림을 지우지 않습니다. 그러나 아래 두 줄의 코드는 문자열 변수를 채우기 전에 매번 문자열 스트림 변수를 정리했습니다. (2 시간의 시행 착오 및 Google 검색), btw, 각 줄을 자체적으로 사용하면 트릭을 수행하지 않습니다.
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
답변
개념적 문제입니다.
Stringstream은 스트림이므로 반복자가 전달되어 리턴 할 수 없습니다. 출력 문자열 스트림에서 다른 출력 스트림과 마찬가지로 flush ()를 다시 초기화해야합니다.