2012-09-08 3 views
2

이것은 내 첫 번째 게시물입니다. 나는이 C++ 문제에 대해 잠시 동안 노력해 왔으며 어디에도 없었습니다. 어쩌면 너희들이 나를 시작할 수있는 힌트를 줄 수 있을지도 몰라.크기가 알려지지 않은 두 개의 텍스트 파일에서 두 개의 행렬 곱하기

내 프로그램은 각각 하나의 행렬을 포함하는 두 개의 .txt 파일을 읽어야합니다. 그런 다음 그것을 곱하여 다른 .txt 파일로 출력해야합니다. 여기에서 나의 혼란은 .txt 파일이 설치되고 치수를 얻는 방법입니다. 다음은 행렬 1.txt의 예입니다.

#ivalue  #jvalue  value 
    1   1   1.0 
    2   2   1 

매트릭스의 크기는 2x2입니다.

이러한 행렬을 곱하기 전에 텍스트 파일에서 i와 j 값을 가져와야합니다. 내가이 일을 발견 한 유일한 방법은 문제는 내가 행의 수를 읽고 두 번째 줄에 도착하는 방법을 몰라

int main() 
{ 
    ifstream file("a.txt"); 
    int numcol; 
    float col; 
    for(int x=0; x<3;x++) 
    { 
    file>>col; 
    cout<<col; 
    if(x==1)  //grabs the number of columns 
    numcol=col; 
    } 
    cout<<numcol; 
} 

입니다. 그리고 그 위에 다른 matrices 파일에 대한 정확한 결과를 줄 것이라고는 생각하지 않습니다.

불명확 한 점이 있으면 알려주십시오.

업데이트 고마워요! getline이 올바르게 작동합니다. 하지만 지금은 또 다른 문제가 있습니다. 행렬 B에서이 설정과 같다 :. 내가 프로그램을하자가 다운 어쩌면 더 4 선, (행렬들 치수를 알 수 갈 필요가 알 필요가

#ivalue  #jvalue   Value 
    1   1    0.1 
    1   2    0.2 
    2   1    0.3 
    2   2    0.4 

내 행렬 B의 예는 2 × 2이지만, 그것은 20x20 일 수 있습니다). while (! file.eof())는 내 프로그램을 루프하여 파일의 끝까지 반복하도록합니다. 나는 곱셈을 위해 동적 배열이 필요하다는 것을 알고 있지만 여기에도 하나가 필요합니까?

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    ifstream file("a.txt");  //reads matrix A 
    while(!file.eof()) 
    { 
     int temp; 
     int numcol; 
     string numrow; 
     float row; 

     float col; 
     for(int x=0; x<3;x++) 
     { 
      file>>col; 
      if(x==1) 
      { 
       numcol=col;  //number of columns 
      } 
     } 

     string test; 
     getline(file, test);  //next line to get rows 
     for(int x=0; x<3; x++) 
     { 
      file>>test; 
      if(x==1) 
      { 
       numrow=test;  //sets number of rows 
      } 
     } 
     cout<<numrow; 
     cout<<numcol<<endl; 
    } 


    ifstream file1("b.txt");  //reads matrix 2 
    while(!file1.eof()) 
    { 
     int temp1; 
     int numcol1; 
     string numrow1; 
     float row1; 

     float col1; 
     for(int x=0; x<2;x++) 
     { 
      file1>>col1; 
      if(x==1) 
       numcol1=col1; //sets number of columns 
     } 

     string test1; 
     getline(file1, test1); //In matrix B there are four rows. 
     getline(file1, test1); //These getlines go down a row. 
     getline(file1, test1); //Need help here. 
     for(int x=0; x<2; x++) 
     { 
      file1>>test1; 
      if(x==1) 
       numrow1=test1; 
     } 
     cout<<numrow1; 
     cout<<numcol1<<endl; 
    } 
} 
+0

STL 컨테이너에 익숙합니까? 어떻게 행렬을 메모리에 표현하겠습니까? – Beta

답변

0

"문제는 두 번째 줄에서 행 수를 읽는 방법을 모르겠다."

다음 줄로 이동하려면 std::getline을 사용하십시오.

std::string first_line; 
std::getline(file, first_line);