0

txt ファイルで行列のサイズを返す次のコードを作成しました。たとえば、txt ファイル (これは私のコードのテスト インスタンスでもあります) で以下を見つけた場合、行列 A のサイズ、つまり 3 3 が返されます。

A
1 2 3
4 5 6
7 8 9

B
1 2 3
1 2 3
1 2 3

そして、ここに私のコードがあります:

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

//This function will return the number of integers in a string
int intnum(string s){
int i=0;
string::iterator it;
for(it=++s.begin();it!=s.end();it++){
    if( (*(it-1)>='0'||*(it-1)<='9') && (*it==' ') ){
        ++i;
    }
    else{
        continue;
    }
}
if(s.back()==' '){
    return i;
}
else{
    return i+1;
}
}

  //This function will take the name of the matrix and return its size
int *findmatrixsize(const string filename,const string matrixname){
  int Asize[2];                    
  ifstream fin;
  fin.open(filename); 
  string s;
  while(getline(fin,s)){
    if(s== matrixname){
        cout<<s<< endl;//Locate the position of the matrix
        break;
    }
      }
  Asize[0]=0;
  while(getline(fin,s)){                       
    Asize[1] = intnum(s);                
    if(s.length()==0){                           
        break;
    }
    Asize[0]++;
}
fin.close();                                   

return Asize;
}


int main() {
int *p = findmatrixsize("inputmatrix.txt","A");
cout <<p[0]<<endl << p[1]<< endl;

return 0;
}

int main では、「A」を使用すると常にクラッシュしますが、「B」または「C」(txt ファイルで多数の行列を作成した場合) を使用すると、正常に動作します。ところで、私はビジュアルスタジオを使用しています。

したがって、基本的に、私のコードは常にクラッシュして、txt ファイルの最初の行列の次元を見つけます。

素晴らしい人が理由を教えてくれ、修正するのを手伝ってくれますか?

助けてくれてありがとう!!!

4

0 に答える 0