文字と2次元配列の結合

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ての

文字と2次元配列の結合

#1

投稿記事 by ての » 12年前

文字("i")と、(char String[][ 256 ] = {"文字列"};)を結合して、
文字列("i文字列")にすることは可能でしょうか?
自分なりに調べて試してみたのですが、エラーになってしまいます。
なにか良い方法を知っていましたら、教えていただけるとありがたいです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 文字と2次元配列の結合

#2

投稿記事 by h2so5 » 12年前

エラーが出てもいいのでソースを貼ってください。
「文字と2次元配列の結合」ではなくて、「文字と文字列の結合」ではないのですか?

ての

Re: 文字と2次元配列の結合

#3

投稿記事 by ての » 12年前

試してみたのは、
a = "i" + String;
a = "i" + Stiring[0][256];
strcat("i",String);
strcat("i",String[0][256]);
だったはずです。
僕はまだ初心者なので、他に方法が思いつきませんでした。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 文字と2次元配列の結合

#4

投稿記事 by h2so5 » 12年前

C言語の文字列について確認しましょう

コード:

 'i'         ←これは文字です
 "i"         ←これは文字列です
 char String[][ 256 ] ←これは二次配列なので、複数の文字列が入ります
「文字と文字列の結合」や「文字列と文字列の結合」なら分かりますが、
「文字と複数の文字列」をどうやって結合するのでしょうか?

ての

Re: 文字と2次元配列の結合

#5

投稿記事 by ての » 12年前

僕は今ノベルゲームを作ろうと思っています。
そこで、二次元配列の文字を表示していくのですが、
表示する文字が@だった場合、switchで次の文字に合わせて処理をするといった感じにしました。
今回しようと思っているのが立ち絵の表示で、(文章@I数値(0~9)文章)といった感じです。
case 'I':
// CPは二次元配列の参照位置([SP][CP])
CP ++;
// ここで、数値を画像の名前にしたい(i1、i2等)
CP ++;
break;
~~~
// ここで、数値に対応した画像を表示したい
DrawGraph(0,0,i(数値),TRUE);

オカピーα
記事: 120
登録日時: 13年前

Re: 文字と2次元配列の結合

#6

投稿記事 by オカピーα » 12年前

ぼ、僕だけでしょうか言っていることが良くわかりません・・・
そもそもcaseラベルには文字列は指定できません。すべて定数です。
C,C++,C#,これらを極めることを「3C政策」と言う

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字と2次元配列の結合

#7

投稿記事 by softya(ソフト屋) » 12年前

ノベルゲームでは文字と文字列についてはさけて通れないので、ちゃんと勉強されたほうが良いと思います。
ここで詰まっていると気の利いた禁則処理などを行うことは困難だからです。

方法としては、
1.GetDrawFormatStringWidth()で文字列の描画サイズを調べて座標を計算しながら、DrawFormatString()で描画していけば
文字列A文字列B文字列Cとつないで表示することも可能です。

2.表示用の文字列バッファを用意して、いったんそこに組み立てて表示するのも方法です。
1文字づつの判定時にコピーすれば良いでしょう。
オカピーα さんが書きました:ぼ、僕だけでしょうか言っていることが良くわかりません・・・
そもそもcaseラベルには文字列は指定できません。すべて定数です。
文字列はできませんが文字はできます。
文字は数値ですから。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

non
記事: 1097
登録日時: 14年前

Re: 文字と2次元配列の結合

#8

投稿記事 by non » 12年前

char *strcat(char *s1, const char *s2);
strcatは連結した文字列をs1の配列に格納します。
従って、s1の配列は連結後の文字数が格納される充分大きな大きさでないといけません

>strcat("i",String);

これで、"i"は文字列リテラルです。ここに連結後の文字列を格納できません。
サンプルを載せます。

コード:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1[256] = "i";
    char string[][256] = {"abc","def","ghi"};

    strcat(str1, string[0]);   
    printf("%s\n", str1);
    
    strcat(str1, string[1]);   
    printf("%s\n", str1);

    return 0;
}
switch文の説明は恐らく先頭の一文字で区別したいと認識しました。
するとこんなふうに、分けたいということでしょうか?

コード:

	switch(str1[0]){
		case 'i':
non

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: 文字と2次元配列の結合

#9

投稿記事 by ISLe » 12年前

ての さんが書きました:今回しようと思っているのが立ち絵の表示で、(文章@I数値(0~9)文章)といった感じです。
質問者さんがしたいのは、文字列と文字の結合ではなく、文字列から文字を抽出ですね。

例えば
"あいうえお@l2かきくけこ"
というゲームのスクリプトである文字列の場合、

あいうえお

まで表示された後、'@'に続き'l'が現れたのを画像表示と認識、その次の文字(数字)を配列の添字として使いたいと。
数字は必ず1桁なのでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字と2次元配列の結合

#10

投稿記事 by softya(ソフト屋) » 12年前

そういえば、@I数値(0~9)をどういう仕組で判別しているのかの説明が無いですね。
switch~caseだけでうまく扱えているのか心配です。
数値は将来を考えると1桁で済むとも思えませんがどうされるつもりでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る