2017-12-18 30 views
2

프로그램에서 "2,33,5"-> 2 33과 같은 쉼표 사이에서 정수를 찾습니다. 5. "0,12,4"와 같은 문자열을 입력하면 문제가 발생합니다. stringstream이 tmp에 0을 넣지 않아야하므로 루프가 처음에 while (0)과 같았습니까? 그래서 루프 동안 같은Stringstream C++ while 루프

vector<int> parseInts(string str) { 
stringstream ss(str); //getting string 
vector<int> result; 
char ch; 
int tmp; 
while(ss >> tmp) {  //while(IS IT INTEGER ALREADY OR NOT?) 
    result.push_back(tmp); 
    ss >> ch;   
} 
return result; 
+0

공백으로갑니다. –

+0

@JakeFreeman 예제 입력을 자세히 살펴보십시오. 공백이 없습니다. –

+0

'>> 문제는 왜 "0,12,4"와 같은 문자열을 넣을 때 효과가있는 것입니까? 왜 그것이 문제입니까? 0을 읽는 것을 원하지 않습니까? –

답변

2

는 이제 stringstream은 TMP에 0을 넣으면 안됩니다했다 (0) 처음에?

while 조건은 ss >> tmp입니다. cin에 대한 설명서를 보면 operator>>()istream&을 반환한다는 것을 알게 될 것입니다. 아니요은 방금 읽은 입력을 반환합니다.이 경우 int 값은 0입니다.

또한

, istream (또는 그것의 기본 클래스 중 하나) istream 개체 암시 bool로 변환하는 while 문 조건의 결과로서 요구되는 입력을 허용 operator bool() 과부하. istream 개체는 operator>>()을 호출하는 동안 오류가 발생할 때마다 false으로 평가됩니다. 오류가 없으면 true으로 평가됩니다.

0 입력이 유효한 int이므로 while 루프는 다음 반복을 계속합니다.

+0

아저씨 감사합니다. 내 모든 의심을 떨쳐 버렸습니다. –