- ベストアンサー
文字列を配列化する方法を教えてください!
1列の文字列を配列化する方法を教えてください。 メモリの確保らしいのですが、参考になるソースが拝見できれば嬉しく・・・main から参照したいです。 char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n"; ↓ char str[0] = "AAAA"; str[1] = "BBBB"; str[2] = "CCCCCCCCC"; str[3] = "DDD"; どうやったらいいのか全くイメージがわかないので、 よろしく御願いします!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「あくまで変換、するというところがキーなのです」 というのが、どういう意味かいまいち不明ですが、 普通なら、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などで 改行文字を地道に探すしかないでしょう。
その他の回答 (3)
- graphaffine
- ベストアンサー率23% (55/232)
あくまで私の場合はこうやると言う例です。 コンパイルしてないので、うまく動かないかもしれないがその場合は自分で直して下さいね。 (全角でインデントしているので注意) 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等は使っていませんので必要ならば直して下さい。
お礼
ありがとうございます。 参考になりました。
- nakashi
- ベストアンサー率51% (21/41)
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 }; と宣言するば
お礼
ありがとうございます。
- ret
- ベストアンサー率40% (8/20)
strtokで\n毎に取り出して 各配列に入れるというのはだめなのですか?
お礼
ありがとうございます。 あくまで変換、するというところがキーなのです。
お礼
専門家からのご回答ありがとうございます。