2016-09-09 2 views
3

해커 순위 할당 작업을하고 있었고 문자열을 int로 변환해야하고 stringstream을 사용하기로 결정했습니다 (처음 사용했을 때). 어떻게 든 각 변환에 대해 새로운 문자열을 만드는 대신 선언 된 동일한 stringstram을 사용하는 방법이 있습니까? .clear() 함수를 사용해 보았지만 여전히 작동하지 않았습니다.다중 변환을 위해 문자열 스트림을 지우고 재사용

내가했던 방법 :

stringstream s0(hour); // this is my way of converting string to int because stoi doesn't seem to work 
s0 >> i_hour; 
cout << i_hour << endl; 
stringstream s1(minute); 
s1 >> i_minute; 
stringstream s2(second); 
s2 >> i_second;` 

을 어떻게 내가하고 싶었던 일 :

stringstream ss(hour); 
ss >> i_hour; 
ss.clear(); 
ss << minute; 
ss >> i_minute; 

유사 그것을 할 수있는 방법이있다? 새로운 것을 계속 선언하는 것은 정말 지저분 해 보입니다.

+1

더 나은 :'std :: stoi'. –

답변

2

str(s) 메서드를 호출하여 std::istringstream을 새 문자열로 초기화 할 수 있습니다. 문자열에서 변환하는 경우 모두 std::istringstream을 사용해야합니다.

이전 변환에서 오류가 발생한 경우 오류 상태를 지우려면 clear()도 필요합니다.

그래서 예는 다음과 같습니다

istringstream ss(hour); 
ss >> i_hour; 
ss.clear(); 
ss.str(minute); 
ss >> i_minute; 
+0

좋아, 고마워, 고마워. –

2

사용

ss.str(""); 

스트림을 취소 할 수 있습니다. ss.clear()은 플래그 만 재설정합니다.

+0

이것은 해결책 인 것 같다 :) –

+0

@ Arūnas : Ups, yes, double post :-) – Klaus

관련 문제