• ベストアンサー

文字列を配列化する方法を教えてください!

1列の文字列を配列化する方法を教えてください。 メモリの確保らしいのですが、参考になるソースが拝見できれば嬉しく・・・main から参照したいです。 char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n";  ↓ char str[0] = "AAAA";    str[1] = "BBBB";    str[2] = "CCCCCCCCC";    str[3] = "DDD"; どうやったらいいのか全くイメージがわかないので、 よろしく御願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

「あくまで変換、するというところがキーなのです」 というのが、どういう意味かいまいち不明ですが、 普通なら、strtokでやるのが一番簡単でしょう。 メモリの確保なんて全然してませんが、適当な例です。 (コンパイルも行っていません) int main() char text[100], *str[10], *p; int i; strcpy(text, "AAAA\nBBB...."); i=0; for(p=strtok(text,"\n"); p!=NULL; p=strtok(NULL,"\n")) { str[i++] = p; if(i==10)break; } ..... } str[?]には、"AAAA"等の文字列ポインタが入りますが これらはtext変数上の領域です。 (text変数内の"\n"は"\0"に変換されてます!) まずい場合は、mallocした上で、コピーするなどします。 strtokを使うのがイヤで自前でするなら、strchrなどで 改行文字を地道に探すしかないでしょう。

windy88
質問者

お礼

専門家からのご回答ありがとうございます。

その他の回答 (3)

回答No.4

あくまで私の場合はこうやると言う例です。 コンパイルしてないので、うまく動かないかもしれないがその場合は自分で直して下さいね。 (全角でインデントしているので注意) char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n" char str[10][20]; int len = strlen(Text),cnt,cnt1=0,cnt2=0; for (cnt=0;cnt<len;cnt++) {   if (Text[cnt]=='\n')   {     cnt1++;     cnt2=0;     continue;   }   str[cnt1][cnt2++]=Text[cnt]; } malloc等は使っていませんので必要ならば直して下さい。

windy88
質問者

お礼

ありがとうございます。 参考になりました。

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.3

char str[0] = "AAAA";    str[1] = "BBBB";    str[2] = "CCCCCCCCC";    str[3] = "DDD";  ↓ char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n"; への変換のほうがコストが安いので 最初から char* str[] = {  "AAAA",  "BBBB",  "CCCCCCCCC",  "DDD",  NULL }; と宣言するば

windy88
質問者

お礼

ありがとうございます。

  • ret
  • ベストアンサー率40% (8/20)
回答No.1

strtokで\n毎に取り出して 各配列に入れるというのはだめなのですか?

windy88
質問者

お礼

ありがとうございます。 あくまで変換、するというところがキーなのです。

関連するQ&A