- ベストアンサー
"文字列"に関数を埋め込めるか
VBで人が作ったソースを読んでいました。 lbuf = New String() {"*「そなたが つぎのレベルになるには", _ " あと " & NumberStringToWide(dist.ToString()) & "ポイントの", _ " けいけんが ひつようじゃ。", _ 見たいなコードがあって、どうやら文字列に関数を埋め込んでいたみたいです。 C言語でこれに相当することはできますでしょうか? 説明しやすいように分かる範囲で書いてみました。 #include <stdio.h> char *Message[] = { "次のレベルアップは /*ここに関数*/ です", } int numget( void ){ return 100; } int main( void ){ printf("%s", Message[0]); return 0; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問に書かれえたコードを利用するのなら、こんな感じですね。 #include <stdio.h> char *Message[] = { "次のレベルアップには%d点の経験値が必要です。\n", }; int numget( void ){ return 100; } int main( void ){ printf(Message[0], numget()); return 0; }
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> と言うことはCでそういうことはできないということですね。 char buff[256]; int exp = XXX; /* 経験値 */ sprintf(buff, " あと %dポイントの", exp); C++なら std::ostringstream stream; stream << " あと " << exp << "ポイントの"; std::string result = stream.str();
補足
なるほど。参考になりました。ありがとうございます!
- redfox63
- ベストアンサー率71% (1325/1856)
文字列の連結は Cでもできますよ ランタイムライブラリの strcatなどでつなぎます char buf[256]; char s1[] = "つぎのレベルになるには"; char s2[] = "ポイントの経験が必要じゃ"; char s3[20]; sprintf( s3, "%d", dist ); buf = strcat( s1, s3 ); // つぎのレベルになるには + dist buf = strcat( buf, s2 ); // つぎのレベルになるには + dist + ポイントの経験が必要じゃ または char buf[256]; sprintf( buf, "つぎのレベルになるには %d ポイントの経験が必要じゃ", dist ); といった具合でもいいでしょう
お礼
すごい!ありがとうございます!! sprintfという関数は出力を対象にコピーするという関数だったんですね。 こんな便利な関数だとは知りませんでした。 後で帰宅してからじっくり使ってみようと思います。 追加で何か質問することがあるかもしれないので回答の締め切りはもう少しお待ちください。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> どうやら文字列に関数を埋め込んでいたみたいです。 違います。 VBには(Cにはない)型:"文字列"があり、'&' によって文字列を繋ぐことができます。 " あと " と、関数NumberStringToWideの戻り値、そして "ポイントの" を繋いでいるだけです。 文字列中に埋め込まれているわけではありません。
お礼
なるほど・・。ただ連結しているだけでしたか・・。 と言うことはCでそういうことはできないということですね。
補足
そういえば、文字列と文字列の間に変数や関数の値を代入することはCでは可能なのでしょうか? たとえば int Lv = 10 "今のレベルは" "じゃ" という2つの文字列を連結させさらに間に変数Lvを差し込んで、 "今のレベルは10じゃ" という新しい文字列をCで作るのは可能ですか?
お礼
こんなことCでできたんですね。 こういうことがしたかったのでとても参考になりました。 本当にありがとうございます!!