C vs. C++:テキストファイルの一括読み込み

C言語の勉強でテキストファイルを一括で読み込むというのを挑戦していた。C++のほうが簡単との指摘があった。そのときのやりとりを記録に残す。 最終的に行数は以下のようになった。 C:10行 C++:15行 続きを読む
3
. @senopen

思い立ってC言語の勉強再開。getlineという関数があった気がしたけど,ISOの規格にはなかった。なんでもPOSIXとかSUSとか他の規格で定義されてるらしい。SUSが一番大きい集合だから,これにあれば大丈夫だよな… pubs.opengroup.org/onlinepubs/969…

2015-11-06 23:30:23
. @senopen

@senopen しかし,手元の本には解説がない。独習C,HeadFirst,C実践プログラミング,プログラミング言語C…。 うーん。

2015-11-06 23:38:32
. @senopen

@senopen getlineとgetdelim関数。元々はGNUの独自拡張だったけど2008年にPOSIX標準に取り込まれたらしい。 テキスト処理の基本として,ファイルを文字列で全部読み込んで,改行で区切って処理というのをよくやる。ひとまずCでもできるようにするか…。

2015-11-07 00:36:04
. @senopen

@senopen C言語でファイルまるごと読み込むというの。 getdelim関数の区切り文字にEOFを指定して最後まで読んだけど。もっといい方法あるのかな。getdelimの引数の変数をいちいち定義するのが面倒… pic.twitter.com/nQ113ITm69

2015-11-07 01:53:09
拡大
. @senopen

@_EnumHack C++だとこの画像みたいな感じですか?もっと簡単にできますか?この方法はライブラリを使いすぎです。 C++でCより短く書けるのですか? fa11enprince.hatenablog.com/entry/2014/04/… pic.twitter.com/W080gbTnpX

2015-11-07 02:03:12
拡大
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

@senopen stringが使えるので楽って言いたかったです。こんな感じでどうか。 pic.twitter.com/tmAFvv702n

2015-11-07 02:21:41
拡大
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

ライブラリ4つ(しかも標準ライブラリ)で使いすぎだと言われたらC++では何もできない(何もできないとはいっていない)

2015-11-07 02:23:29
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

自分で標準ライブラリでできる処理を書くのは下策

2015-11-07 02:25:44
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

とは言え標準ライブラリが使いにくいと常に思っている

2015-11-07 02:26:26
. @senopen

@_EnumHack なるほど。すっきりしてますね。以下2点が気になりますが。 1.tmpという一時変数の存在 2.whileの制御構造の存在 参考になりました。

2015-11-07 02:30:42
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

@senopen tmpは汚いですね(汗) while使わないならイテレータを使うしかないですね

2015-11-07 02:33:04
秋津早苗 @akitsu_sanae

C++はライブラリで出来ることは言語機能に含まない言語だからライブラリ使い過ぎと言われると辛い

2015-11-07 02:37:06
. @senopen

@_EnumHack 一発で読み込めるような関数ないのですか?スクリプト型言語みたいに。いちいちそこでループさせないといけないのがなんか気持ち悪いです。 あと,C言語だとライブラリ1個で済むのにC++になったとたん3倍になるのもなんかいまいちです。

2015-11-07 02:37:30
yumetodo @yumetodo

@_EnumHack std::stringでゴリ押すしかない!

2015-11-07 02:38:45
. @senopen

@senopen このgetdelim関数を使ったファイル全体の一括読み込み。ネットで探したけど,ここくらい。 あまり情報ないな…。まあいいか。今後はこの方法でファイル読み込もう。 stackoverflow.com/questions/1745…

2015-11-07 02:43:15
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

@senopen それが、ないのですね。ライブラリは小分けにして必要なだけインクルードしたほうがよいと思いませんか? 機能を疎結化して小分けにして組み合わせて使えというのが設計指針なのですよ。ポリシーですかね。

2015-11-07 02:43:28
. @senopen

@_EnumHack 方針はわかりますけどね。 単純にCとC++を比較したときに,目がつきました。たぶん,大きくて複雑なことしようとしたら有効なのでしょう。 今まで楽してたので面倒に思っただけですよ。

2015-11-07 02:50:26
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

@senopen (うーん、なんかわかってもらえてない感がすごいな)

2015-11-07 02:54:44
. @senopen

@_EnumHack C言語もC++と同じようにライブラリでできることは言語機能に含まないような設計だったと思います。 似ているので比較してしまいます。 C++を支持しているようですけど,今のところ僕はCもそんなに悪くないと思っていますのでね。

2015-11-07 02:59:39
🦝❄いなむのみたまのかみ🦊🌸 @mitama_rs

@senopen 似ていると言うか、ほぼ同じでは? CでできることがC++でも出来るなら、より型安全なC++がいいです派 C++を書きながらC言語の機能も使ったらいいのですよと思ってしまいます

2015-11-07 03:06:35
. @senopen

.@senopen 初期値の最終的に省略できるところを切り詰めて10行に収まった。 定義しないといけない変数が多いな。後1個サイズを指定している変数を削れたらよいのだけど。もうちょい試そうか。 うまくいけばスニペット化してこの先一生使えるからね。

2015-11-07 03:07:43