>>

2012-02-19 7 views
-1

を使わない変数に読み込み線を割り当てるちょっとC++をやっているだけですが、私が気付かないことの1つは、=の代わりに>>を置き換えることができないということですか?>>

以下の私のコード:

char output[100]; 
if (myReadFile.is_open()) 
{ 
    for(int i=0; i != random_integer; i++) 
    { 
     if(i == random_integer-1){ 
     myReadFile >> output; 
     printf("%s",output); 
     } 
    } 
} 
myReadFile.close(); 

私はoutput = myReadFilemyReadFile >> outputを変更したいのですが、あなたはそれを行うことはできませんか?

私の2番目の質問は、出力に割り当てる文字列の長さを測定したいのですが、文字配列全体をループせずにどうすればいいですか?彼らは2つの無関係な演算子をしているので、あなたが代わりに>>=を使用することはできません

TIA

+0

いいえ、ファイルを 'char'の配列に割り当てることはできません。どのような行動を期待していましたか? –

+2

なぜあなたは '' 'の代わりに' = 'を使うことができるべきだと思いますか? –

答えて

4

理由があります。

文字列長の問題を解決するには、未加工のchar配列を使用しないでください。あなたは=演算子を使用することはできません

std::string str; 

myReadFile >> str; 
+0

それでは、そのサイズを得るのは簡単ですか? –

+0

@Eric:はい、単に 'str.size()'を使用してください。 –

-2

、しかし、あなたは別のものを選ぶことを躊躇しなければならない理由はありません:それは内部で独自のメモリを管理しているため、代わりにstd::stringを使用してください。

#include <string> 
#include <fstream> 

char* operator+ (char* s, std::istream &in) { 
    in >> s; 
    return s; 
} 


int main(){ 
    std::fstream myReadFile ("test.txt", std::fstream::in); 
    int random_integer = 4; 

    /*start your code*/ 
    char output[100]; 
    if (myReadFile.is_open()) 
    { 
     for(int i=0; i != random_integer; i++) 
     { 
      if(i == random_integer-1){ 
      output + myReadFile; 
      printf("%s",output); 
      } 
     } 
    } 
    /*end your code*/ 
} 

test.txtの内容::コードから

aaaa 
bbbb 
cccc 
dddd 
eeee 

出力:

char* operator+ (char* s, std::istream &in) { 
    in >> s; 
    return s; 
} 

あなたのコードでこれを使用するには、これを試してみてください。私は+があなたの状況のた​​めに理にかなっていると思います

aaaa 

ジョークを別としてとすると、でなくても、は実際にこの状況で別の演算子を使用しようとします。あなたのコードは入力(ファイル)ストリームから読み込んでいるので、それを明確にする演算子>>を使うべきです。

C++には、上記で実証した「演算子オーバーロード」という機能があります。この関数を使用すると、選択したタイプの組み込み演算子の動作を変更できます。ただし、機能を理解しにくくするような方法で機能を悪用しないように注意する必要があります。

一般にプログラミングでこのようなデザインを選択するときは、読者のためにコードを理解しやすくするオプションを選択してください。これは変数名、コメントなどに適用されます。

+2

これは現時点で非常に有益な回答ではないかと思います。 –

関連する問題