2015-01-21 2 views
0

두 개의 텍스트 파일을 벡터 배열에 넣은 다음 새 텍스트 파일에 쓰면 병합해야합니다. 병합 후. 새 파일에 추가 문자가 있습니다.두 개의 텍스트 파일을 병합하면 이상한 결과가 나타납니다.

FE : 버퍼의

f1.txt ("text1") 
f2.txt ("text2.") 
f12.txt ("text1˙text2.˙W64") 

내용 :이 때문에 메모장 또는 파일 자체 추측

int main(){ 
     enum errorcode{FNF,FNC}; 
     vector<char> buffer; 
     char ime[255]; 
     cin>>ime;//first file 
     ifstream ud1(ime,ios::in); 
     if(ud1.is_open()){ 
         while(!ud1.eof())buffer.push_back(ud1.get()); 
         ud1.close(); 
         } 
     else {cout<<"File not found.";return FNF;} 
     cin>>ime;//second file 
     ifstream ud2(ime,ios::in); 
     if(ud2.is_open()){ 
         while(!ud2.eof())buffer.push_back(ud2.get()); 
         ud2.close(); 
         } 
     else {cout<<"File not found.";return FNF;} 
     cin>>ime;//new file 
     ofstream id(ime,ios::out); 
     if(id.is_open()){ 
         for(int i=0;i<buffer.capacity();i++)id.put(buffer[i]); 
         id.close(); 
         } 
     else {cout<<"File not created.";return FNC;} 
     return 0; 

     } 

". 텍스트 1, 텍스트 2 W64"여기

코드입니다 . 이유를 말씀해 주시겠습니까?

+1

을'아이디 << ud1.rdbuf() << ud2.rdbuf(); '세 개의 파일을 검증 한 후 성공적으로 단축 할 연 이것 좀 봐. 그리고 관계없이,'.eof()'id를 사용하여 루프 조건 [** is wrong **] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered -잘못된). – WhozCraig

답변

0

Vector capacity : 요소에 대해 현재 벡터에 할당 된 저장 공간의 크기를 반환합니다.

사용해야합니다. vector size : 벡터의 요소 수를 반환합니다. 이것은 벡터에 저장된 실제 객체의 수이며 반드시 저장 용량과 동일하지는 않습니다. (첫 번째 서명이 문자를 읽거나 파일의 마지막 값을 반환

반환 값

다음 ˙

소개

istream::get 반환 값을보고하십시오 EOF). 스트림에 문자를 사용할 수없는 경우 (이 경우 failbit 플래그도 설정됩니다).

그래서, 당신이에 루프를 변경할 수 있습니다 : 내가 생각

while(!ud1.eof()){ 
    int tmpChar = ud1.get(); 
    if(!ud1.eof()) 
     buffer.push_back(tmpChar); 
} 
+0

입력 해 주셔서 감사합니다. 용량을 크기로 변경 한 후에는 W64가 사라졌지 만 ˙ 텍스트와 텍스트 사이에는 ˙ 차이가 남아 있습니다. – pajser

+0

내 편집을 봐 "소개 ˙" – Lucian

관련 문제