2017-08-30 19 views
0

私はC++を学ぶクラスに入っています。最初のプロジェクトは、テキストファイルからデータを読み込み、このデータに対してさまざまなチェックを行い、別のプロジェクトに出力することですファイルを少し変更した形式で保存します。テキストファイルの値が一意であるかどうかを確認する

元のデータには、スペースで区切られた列があります。最初の列(ID)を確認して、各行が一意のIDを持つようにします。また、10番目の列に4つの値のいずれかが含まれていることを確認する必要があります。私は第10列をチェックしても問題はありませんが、各行のIDが一意であるかどうかを確認する問題があります。

Javaでは、各IDをベクトルまたは配列に追加して、そのベクトルに後続の各要素が含まれているかどうかを確認し、その場合はエラーをスローします。しかし、プロジェクトには3つのヘッダーしか含めることができません。

#include <iostream> 
#include <iomanip> 
#include <string> 

したがって、ベクトルまたは配列を使用して一意のIDを確認することはできません。私がここで何をするかについての助けは大いに感謝されます。

+1

IDに表示されない文字で区切られた、これまでに遭遇したすべてのIDのリストを蓄積する文字列があります。 'string :: find'を使って、新しいIDが既に出現しているかどうかを調べます。 –

+2

これらの3つのヘッダーしか許可されていない場合、ファイルからデータをどのように読み取っていますか?または、ファイルがコマンドラインからstdinにパイプされていますか? –

+0

@BenjaminLindley、私はそれがパイプされていると思います。教師はそうする – Pranay

答えて

0

C++で文字列の配列を作成し、その配列にIDを格納することができます。このループを使用して重複要素をチェックします。

for(int i=0; i<s.length(); i++) 
    { 
     for(int j=i+1;j<s.length();j++) 
     { 
      if(s[i]==[j]) 
      { 
       cout<< s[i] << " is duplicate"; 
      } 
     } 
    } 

0

このようなものです。あなたが学んでいるので、これはクラスの運動のために大丈夫です。私は生産のためにこれをお勧めしません。

class myvector{ 
const int maxsz = 1000; 
std::string data[maxsz]; 
int currentsz; 

void insert(); //increment size; 
std::string get(int); //retrieve an index; 
bool compareToAll(const std::string& val) { 
    for(int i = 0; i < currentsz; ++i) { 
     if(val == data[i]) return true; 
     } 
    return false; 
    } 

}; 

理想的には、setまたはunordered_setを使用します。ベクトルはn^2です。

学習しているので、オーバーロード演算子の使用をおすすめします。

関連する問題