문제

나는 이미 여러 가지를 시도했지만

std::stringstream m;
m.empty();
m.clear();

둘 다 작동하지 않습니다.

도움이 되었습니까?

해결책

모든 표준 라이브러리 유형에 대해 멤버 함수 empty() 명령이 아닌 쿼리입니다."당신은 비어 있습니까?" "내용을 버리십시오"가 아닙니다.

그만큼 clear() 멤버 함수는 다음에서 상속됩니다. ios 스트림의 오류 상태를 지우는 데 사용됩니다.파일 스트림의 오류 상태가 다음으로 설정된 경우 eofbit (파일 끝), 호출 clear() 오류 상태를 다시 다음으로 설정합니다. goodbit (오류 없음).

내용을 지우려면 stringstream, 다음을 사용하여:

m.str("");

다음을 사용하더라도 정확합니다.

m.str(std::string());

호출을 피하기 때문에 기술적으로 더 효율적입니다. std::string 소요되는 생성자 const char*.하지만 요즘 컴파일러는 두 경우 모두 동일한 코드를 생성할 수 있어야 합니다. 따라서 저는 더 읽기 쉬운 것을 선택하겠습니다.

다른 팁

한 줄에 오류 상태를 지우고 strignstream을 모두 비울 수 있습니다.

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++에서 작동하는 것 같았습니다. 사용자의 요청에 따라 반복적으로 실행하면 코드가 처음에 제대로 작동하는 stringstream 변수를 채우는 메뉴 형태의 프로그램이 있었습니다. 실행되지만 다음에 사용자가 동일한 코드를 실행할 때 문자열 스트림을 지우지 않습니다.그러나 아래 두 줄의 코드는 문자열 변수를 채우기 전에 매번 stringstream 변수를 지웠습니다.(2 시간의 시행 착오 및 Google 검색) btw, 각 줄을 자체적으로 사용하면 트릭을 수행하지 못할 것입니다.

//clear the stringstream variable

sstm.str("");
sstm.clear();

//fill up the streamstream variable
sstm << "crap" << "morecrap";

개념적인 문제입니다.

Stringstream은 스트림이므로 해당 반복자는 정방향이므로 반환할 수 없습니다.출력 문자열 스트림에서는 다른 출력 스트림과 마찬가지로 다시 초기화하려면 플러시()가 필요합니다.

이는 gnu C++의 문자열 스트림에 있는 데이터를 삭제하지 않습니다.

    m.str("");
    m.str() = "";
    m.str(std::string());

다음은 나를 위해 문자열 스트림을 비웁니다.

    m.str().clear();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top