문제

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top