2014-07-18 10 views
-1
#include <iostream>  
#include <fstream>  
#include <vector> 
#include <iterator> 
using namespace std; 

int main() { 
    vector< vector<char> > MyVector; 
    ifstream infile("text.txt", ifstream::binary); 
    ofstream outfile("new.txt", ofstream::binary); 

    if (infile) { 
     // get length of file: 
     infile.seekg(0, infile.end); 
     int length = infile.tellg(); 
     infile.seekg(0, infile.beg); 

     char * buffer = new char[length]; 
     cout << "Reading " << length << " characters... "; 
     // read data as a block: 
     infile.read(buffer, length); 

     if (infile) 
      cout << "all characters read successfully."; 
     else 
      cout << "error: only " << infile.gcount() << " could be read"; 

     MyVector.resize(1); 
     for (int i = 0, j = 0; i < length; i++) { 
      if (buffer[i] == ' ' && '\n') { 
       j++; 
       MyVector.resize(j + 1); 
       MyVector[j].push_back(0x0D); 
       MyVector[j].push_back(0x0A);    
      } 
      else { 
       MyVector[i].push_back(buffer[i]); 
      }   
     } 
     for (int i = 0; i < MyVector.size(); i++) { 
      outfile.write(&MyVector[i][], 1); 
     } 

     infile.close(); 
     outfile.close(); 
     // ...buffer contains the entire file... 
     getchar(); 

     delete[] buffer;  
    } 
    return 0; 
} 

텍스트 파일을 벡터로 읽은 다음 새 파일을 만들어서 약간 수정합니다.범위 밖의 벡터 아래 첨자

인쇄 방법을 잘 모르겠습니다. 너무 다른 곳에서 잘못된

for (int i = 0, j = 0; i < MyVector.size(); i++) { 
     outfile.write(&MyVector[i][j], 1); 
    } 

아마 뭔가 :

나는이 루프 매우에 문제가있는 것 같아요.

은 지금 내가 받고 있어요 : "벡터 첨자 범위 오류 중 ..."

+0

무엇을 수정하려고합니까? 'If ​​(buffer [i] == ''&& '\ n')'는 항상 참이고, MyVector.size()는 각각의 길이가 아닌'MyVector'에 들어있는 벡터의 수입니다. 그 벡터들. –

+0

.txt 파일에서 나는 임의의 단어를 얻었다. 새 텍스트 파일에서 각 단어를 새 줄로 시작하려고합니다. – JuriR

+0

멋지지만 내 질문에 전혀 답하지 않았습니다. 어떤 수정 작업을 수행하려고합니까? 코드에서 분명하지 않습니다. –

답변

1

가 많은 문제가 있습니다. 다음은 몇 가지 있습니다 :

if (buffer[i] == ' ' && '\n') 

당신은 아마 의미 : 여기

if (buffer[i] == ' ' || buffer[i] == '\n') 

:

MyVector[i].push_back(buffer[i]); 

당신은 아마 의미 : 여기

MyVector[j].push_back(buffer[i]); 

:

outfile.write(&MyVector[i][], 1); 

당신은 아마 의미 : (이 운동의 경우는, 좋은 운동이 될 수 있음)

outfile.write(&MyVector[i][0], MyVector[i].size()) 
outfile.write("\n",1) 

은 또한 당신이 바퀴를 개혁하는 것을 알 수 있습니다. 실제로 std :: string 및 std :: getline을 사용하여 줄 단위로 텍스트 파일을 읽어야합니다.

+0

예. 실제로 운동입니다. 저를 조금 도와 주었고, 코드를 수리하려고했습니다. 그리고 문제가 여전히 남아 있다면 나는 그때 다시 돌아올 것입니다. 어쨌든 Paolini – JuriR

+0

감사합니다. 다시 한 번 감사드립니다! – JuriR