• 締切済み

C++Builder6 ポインタ 

-----unit1.cpp------------------------------------ #include<state.h> void __fastcall TForm1::Button1Click(TObject *Sender) {  char *tlptr; State start_state; deque<State> open_list; deque<State> closed_list; open_list.push_back( start_state ); tlptr=""; for(i=0 ; i<=processcnt && ! open_list.empty() ;i++){ State s = open_list.front(); open_list.erase( open_list.begin() ); print_progress(s,tlptr);     print_progress1(open_list,olptr); if ( s.succeeded() ){ break; } if ( s.failed() ){ continue; }         ・         ・   } Memo1->Text=tlptr; Memo1->Text=AnsiReplaceStr(Memo1->Text,"\n","\r\n"); processcnt += 1; } -state.h------------------------------------------ void print_progress( const State& s, char *tlptr) { tlptr = strcat(tlptr,"探索:"); tlptr = strcat(tlptr,s); tlptr = strcat(tlptr,"\n"); } 表示結果として  探索:s(の中身1) 改行  探索:s(の中身1,2) 改行      ・      ・ としたいのですが,strcatはsがState型でchar型ではないため,strcatが使えません。charポインタの構造体を作り,上記のような結果を得るにはどのようにしたらよいのでしょうか。また,そのほかにchar型でなくても文字の連結が出来るものはありますでしょうか? 調べたのですがわからず,質問しました。 今までたくさんの方々にご返事いただき,参考にし,考えて参りました。どうかアドバイスございましたら,お返事お願い致します。

みんなの回答

  • KoHal
  • ベストアンサー率60% (110/181)
回答No.2

補足です。 その一。 const State&に気を取られて見逃してました。  tlptr=""; strcatは領域を拡張してくれません。これは不可。 その二。 >Memo1->Text=AnsiReplaceStr(Memo1->Text,"\n","\r\n"); 改行コードの変換ですね。すいません。気が付きませんでした。 しかしそれなら最初から   tlptr = strcat(tlptr,"\r\n"); で良いわけです(ただしtlptrは十分な領域を確保してること)。 その三。 State型の文字列表現方法が判らなかったら、Stete型の定義と出力したいフォーマットを提示してください。

  • KoHal
  • ベストアンサー率60% (110/181)
回答No.1

>strcatはsがState型でchar型ではないため,strcatが使えません。 >charポインタの構造体を作り,上記のような結果を得るには >どのようにしたらよいのでしょうか。 State型はご自身で定義した型なのですから、ご自身でcharポインタ(AnsiStringかstd::stringを推奨しますが)を返すメンバ関数なり演算子なりを定義すればよいのです。というか、それがなければstrcatも何も使えません。 正直言って、わざわざstrcatを使わないでもと思います。 要はState型のインスタンスの内容をAnsiStringなりstd::stringに出力する手段が必要なのであり、それがあればそれですむわけです。strcatは必要ありません。 >文字の連結が出来るものはありますでしょうか? はい、VCLのAnsiStringか、std::stringを使いましょう。  AnsiString hoge = "hoge";  AnsiString foo = "foo";  hoge += foo; これでhogeは"hogefoo"になりますよ。 以前にも言いましたが、とりあえず入門書をきちんと読んで基本を勉強することをお薦めします。 > Memo1->Text=AnsiReplaceStr(Memo1->Text,"\n","\r\n"); ところで、これは何がしたいのでしょうか?

関連するQ&A