C ++ stringstream 추가 캐릭터를 반환합니까?
문제
C ++ stringstream 클래스를 사용하여 비교적 간단한 문자열 조작을 수행하려고 시도했지만 get () 메소드에 문제가 있습니다. 어떤 이유로 어떤 이유로 문자별로 출력 문자를 추출 할 때마다 최종 문자의 두 번째 사본이 추가됩니다.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
stringstream ss("hello");
char c;
while(!ss.eof()) {
ss.get(c);
cout << "char: " << c << endl;
}
return 0;
}
프로그램의 출력은 다음과 같습니다.
char: h
char: e
char: l
char: l
char: o
char: o
당신이 나에게 줄 수있는 모든 도움은 감사 할 것입니다.
해결책
스트림 끝에 ss.eof()
스트림의 끝이 곧 도달 할 것이라는 것을 아직 알지 못하지만 다음과 같은 문자 추출이 실패합니다. 스트림의 끝에 도달했기 때문에 추출이 실패했기 때문에 c
변경되지 않았습니다. 귀하의 프로그램은 그것을 인식하지 못합니다 ss.get(c)
실패하고 그 오래된 가치를 인쇄합니다 c
다시.
스트림에서 읽을 수있는 캐릭터가 있는지 확인하는 더 좋은 방법은 다음과 같은 루프입니다.
while (ss.get(c)) {
cout << "char: " << c << endl;
}
다른 팁
루프의 순서 때문입니다. 당신의 독서 0과 eof.
이와 같이 코드를 재정렬하십시오
int main() {
stringstream ss("hello");
char c;
ss.get(c);
while(!ss.eof()) {
cout << "char: " << c << endl;
ss.get(c);
}
return 0;
}
EOF 플래그는 파일 끝을 지나서 읽으려고 시도하는 경우에만 설정됩니다. 다음 코드는 이전 대신 get () 이후 EOF를 테스트하여 문제를 해결합니다.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
stringstream ss("hello");
char c;
while(1) {
ss.get(c);
if(ss.eof())
break;
cout << "char: " << c << endl;
}
return 0;
}
제휴하지 않습니다 StackOverflow