C言語関係掲示板

過去ログ

No.1337 二次元配列→三次元配列の変換法でご質問です。

[戻る] [ホームページ]
No.18014

二次元配列→三次元配列の変換法でご質問です。
投稿者---OZA(2004/11/12 13:12:58)


二次元配列→三次元配列の変換法でご質問です。

まず下記のように宣言します。

char str2[100][100];
char str3[100][100][100]


二次元配列の中身は下記のような感じです。
"AAAA XXXX SSS SF"
"BBBB DDDD GGG TZ"
"CCCC ZZZZ PPP JJJJ"

※注意点として
"AAAA XXXX SSS SF"←これらは1つの文字列です。
文字列の中にタブが入っていてタブで見分けて文字列を分解し下記のような3次元配列にしたいわけです。


"AAAA" "BBBB" "CCCC"
"XXXX" "DDDD" "ZZZZ"
"SSS" "GGG" "PPP"
"SF" "TZ" "JJJJ"


この方法が全く分かりません・・・。
おわかりの方ご伝授くださいませ。
よろしくお願い致します。



No.18016

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---επιστημη(2004/11/12 13:16:11)


>"AAAA XXXX SSS SF"←これらは1つの文字列です。
>文字列の中にタブが入っていてタブで見分けて文字列を分解し下記のような3次元配列にしたいわけです。
>"AAAA" "BBBB" "CCCC"
>...

要するにtabを区切り文字として、複数の部分文字列に切り分けたいのね?
strtok使えばいいんじゃないかしら。



No.18017

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---OZA(2004/11/12 13:22:13)


>要するにtabを区切り文字として、複数の部分文字列に切り分けたいのね?
>strtok使えばいいんじゃないかしら。

ありがとうございます。
お手数ですが、いまいち処理のイメージがつかめませんので
簡単にサンプルソースを書いていただけないでしょうか。
すいません・・・。


No.18018

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---επιστημη(2004/11/12 13:24:09)


>お手数ですが、いまいち処理のイメージがつかめませんので
>簡単にサンプルソースを書いていただけないでしょうか。
>すいません・・・。

マニュアルは読みましたか?



No.18019

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---επιστημη(2004/11/12 13:31:26)


>簡単にサンプルソースを書いていただけないでしょうか。

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

int main() {
  char input[] = "AAAA\tXXXX\tSSS\tSF";
  for ( char* p = input; (p = strtok(p,"\t")) != NULL; p = NULL ) {
   puts(p);
  }
  return 0;
}



No.18021

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---OZA(2004/11/12 13:58:24)


ありがとうございます。
これを二次元配列→三次元配列に応用すると下記のようになるのでしょうか???




  char str2[100][100];
char str3[100][100][100];
int i=0;
int ii=0;


for(ii=0;ii<回したい数;ii++)
{

  for ( char* p = input[ii]; (p = strtok(p," -TAB- ")) != NULL; p = NULL ) {
  str2[i][ii]=p;
i++
  }
  return 0;

}


No.18022

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---επιστημη(2004/11/12 14:02:51)


>これを二次元配列→三次元配列に応用すると下記のようになるのでしょうか???

訊くまでもないでしょう。やってみればええやない。



No.18172

Re:二次元配列→三次元配列の変換法でご質問です。
投稿者---かずま(2004/11/16 22:13:00)


char str2[100][100]; は、約 10キロバイト。
char str3[100][100][100]; は、約 1メガバイト。
10KB のデータを処理するのに 1MB 使うとは、これ如何に。
私なら三次元配列なんか使いませんが、使ったとして、ちょっと変わった
プログラムを書いてみました。
#include <stdio.h>

char s2[5][80] = {
    "AAAA\tXXXX\tSSS\tSF",
    "BBBB\tDDDD\tGGG\tTZ",
    "CCCC\tZZZZ\tPPP\tJJJJ",
};
char s3[5][40][80];

int get(void)
{
    static int i = 0, j = 0;

    if (s2[i][j]) return s2[i][j++];
    if (j == 0) return EOF;
    i++, j = 0; return '\n';
}

int main(void)
{
    int i, j, k, c;

    for (i = j = k = 0; (c = get()) != EOF; )
        if (c == '\n') s3[i][j][k] = '\0', i++, j = k = 0;
        else if (c == '\t') s3[i][j][k] = '\0', j++, k = 0;
        else s3[i][j][k] = c, k++;

    for (i = j = 0; ; )
        if (s3[i][j][0]) printf("[%d][%d]:%s\n", i, j, s3[i][j]), j++;
        else if (j != 0) i++, j = 0;
        else break;

    return 0;
}