2013-04-11 3 views
2

나는 다음과 사투를 벌인거야 : 내가 XML은 다음과 같은 표준 파일에서 읽고 있어요 :: 일부 복사 한 후 & 처리가 텍스트 파일에 기록됩니다 " n"문자열을 읽고 텍스트 파일에 쓰시겠습니까?

"sigma=0\nreset" 

이제 stringstream

. 그리고 난 다음

sigma=0 
reset 

기대했다하지만 슬프게도 난 단지

sigma=0\nreset 

를 얻을 수 있지만 때 내가 직접 내가 할

out << "sigma=0\nreset" 

스트리밍 :

sigma=0 
reset 

나는 현재 일부 자격자가 "\ n"이 (가) "& 복사"중 손실되었습니다 ... 가능합니까? 더 이상 줄 바꿈이 아닌 스트림에서 "\ n"을 추적하는 방법?

감사합니다.

+0

"\ n"을''\\ n "'으로 대체 한 것이 거의 없기 때문에 읽기 직전과 작성 직전에 문자열을 검증하고 출력 코드를 표시 할 수 있습니까? – Useless

+0

xml 파일에 개행 문자 또는'\\'문자 뒤에'n' 문자가 오는가요? –

답변

3

출력 함수가 '\n'과 같은 이스케이프 시퀀스를 처리하지 않기 때문입니다. 리터럴에 대해서만 사용하는 컴파일러입니다. 컴파일러는 문자열의 내용을 전혀 모르기 때문에 문자열 안에있는 경우 "\n"을 개행 할 수 없습니다.

문자열 자체를 구문 분석하고 필요에 따라 줄 바꿈을 써야합니다.

+1

내가 오해하지 않는 한 개행에''\ n ''이 없습니다. '\ n'' _는 개행 문자입니다. – Useless

+0

@Useless 조금 더 명확하게. –

+1

그래, 내가 읽었던 문자열이 문자형''sigma = 0 \ nreset "'에 _identical_ 인 것으로 가정하고 있었지만 지금은 그렇게 확신 할 수는 없다. – Useless

1

실제로는에 "sigma=0\\nreset" (길이 = 14 자)이고 "sigma=0\nreset" (길이 = 13 자)이 아니라고 가정하면 직접 교체해야합니다. 이렇게하면, 매우 어려운 일이 아니다 중 하나를 사용 부스트의 replace_all (http://www.boost.org/doc/libs/1_53_0/doc/html/boost/algorithm/replace_all.html), 또는 std::string::findstd::string::replace :

std::stringstream inStream; 
inStream.str ("sigma=0\\nreset"); 
std::string content = inStream.str(); 

size_t index = content.find("\\n",0); 

while(index != std::string::npos) 
{ 
    content.replace(index, 2, "\n"); 
    index = content.find("\\n",index); 
} 

std::cout << content << '\n'; 

주의 : 시스템 끝 (end-of-line)이 "\n"

이외 인 경우는 사례를 고려할 수 있습니다

에 실제로 "sigma=0\nreset"이 포함 된 경우 복사/처리 및 텍스트 파일에 쓰는 코드를 게시하십시오.

관련 문제