トップページ⇒tech
1001コメント273KB

C言語なら俺に聞け! Part 112

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/08(月) 01:32:01
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん2005/08/08(月) 02:07:25
>>1 乙
0003デフォルトの名無しさん2005/08/08(月) 03:30:15
スレタイと微妙に異なるんですが、
計算量がもっとも少ない双方向リストのソートアルゴリズムは何か
教えてもらえないでしょうか。

よろしくお願いします。
0004デフォルトの名無しさん2005/08/08(月) 03:35:45
双方向のリストでそのままソートすんなよ
いったんmallocで配列作ってそれを、qsort
そのあとリストを作り直す
大きさにもよるが速度と汎用性でピカイチだこれ
0005デフォルトの名無しさん2005/08/08(月) 09:36:29
C言語をはじめたばかりであまりわからないのですが、 
0006デフォルトの名無しさん2005/08/08(月) 09:37:46
>>5
あまりわからないのか。そうかそうか。
0007デフォルトの名無しさん2005/08/08(月) 09:52:11
>>5
ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0008デフォルトの名無しさん2005/08/08(月) 12:48:51
char *hoge;

scanf()で取得した文字列をhogeに入れ、atoi()したいのですが、
この場合、atoiに失敗した(数値に直せない)場合も、atoiに成功して戻り値が0の場合も、どっちも0が返ってきてしまいます。
今はstrcmpでマッチ文字列を0、00、000(ryとforでループさせて調べるようにしていますが、
もっと簡単な方法があれば教えてください。

VS.NET、gccを使っています。
0009デフォルトの名無しさん2005/08/08(月) 12:56:41
>>8
ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0010デフォルトの名無しさん2005/08/08(月) 13:09:59
>>8
strtol
0011デフォルトの名無しさん2005/08/08(月) 13:16:06
即答ありがとうございました。
0012デフォルトの名無しさん2005/08/08(月) 13:39:25
>>8
ポインタ変数には文字列は入らない訳だが。
文字列が入っている領域へのポインタ値を入れるべきだ。
0013おれ ◆dHe9wXXwgk 2005/08/08(月) 13:57:59
>>8
文字列の取得にscanf()は辞めたほうがいいと思われ

というのは古いのか?

それと、>>12にもあるが
*hogeの宣言でだけでなく、mallocなりでメモリをアロケートしなくちゃむりぽ
小規模コードなら、配列で世伊部?
0014デフォルトの名無しさん2005/08/08(月) 16:15:52
>>12
実はJava/Perl/C#から移転してきて、ポインタについてよく分かっていませんでした。
このサイトを参考にもうちょっと考えます。
ttp://www9.plala.or.jp/sgwr-t/lib/strtol.html
>>13
そうだったんですか…知りませんでした。
ttp://f1.aaa.livedoor.jp/~pointc/log70.html
こう書けば良いようですね。fgets(buf, sizeof(BUF_SIZE), stdin);
メモリの動的確保についてですが、ググっでもすでにchar str[256]するようなソースしか見つからず
入力ストリームの文字数は代入するまで取得できないようですね。。
趣味レベルなので、今はstrの末端に\0を代入することにして、正しい取得方法は引き続き調べようと思います。
0015デフォルトの名無しさん2005/08/08(月) 16:18:08
>>4
エーッ、マジっすか?
てっきり横着者の手法だと。。。


回答ありがとうございますm(_ _)m
0016デフォルトの名無しさんNGNG
リンクリストでもクイックソートできるけど、ま、配列に入れてqsort()を呼ぶのが楽だな。
0017デフォルトの名無しさん2005/08/08(月) 18:10:46
char* hoge;
char *hoge;
はどう違うのでしょうか?
0018デフォルトの名無しさん2005/08/08(月) 18:14:00
違わない。好みの問題。
0019デフォルトの名無しさん2005/08/08(月) 18:14:08
書き方
0020172005/08/08(月) 18:14:38
ありがとうございました
0021デフォルトの名無しさん2005/08/08(月) 18:28:09
>>17
自分は
char* hoge;
が好き。
その上で、
char* hoge, *fugo;
は書かず、必ず
char* hoge;
char* fugo;
と書くようにしてる。
0022デフォルトの名無しさん2005/08/08(月) 18:32:39
>>21
で?
0023172005/08/08(月) 18:33:37
char* hoge, geho;
ってかけないんだ しらなかった
0024デフォルトの名無しさん2005/08/08(月) 18:48:53
int i;
int j;
int k;
だるー
0025デフォルトの名無しさん2005/08/08(月) 18:49:55
>>23
書けるけど、
char *hoge;
char geho;
と同意になる。
char* hoge, geho; だと、どっちもポインタに見えて厄介でしょ。
0026232005/08/08(月) 18:53:13
ごめん、俺17じゃない

char* って、キャラ型のポインタ宣言じゃなかったんだ
いつも char *hogeでやってて使ったこと無いからしらんかったよ
0027デフォルトの名無しさん2005/08/08(月) 18:53:18
>>24
そのいい加減な変数名もだるー
0028デフォルトの名無しさん2005/08/08(月) 18:59:30
int a, b, c, d, e, ,i ,j;
0029デフォルトの名無しさん2005/08/08(月) 19:00:39
ひいぃぃ。やめてやめて
0030デフォルトの名無しさん2005/08/08(月) 19:11:06
よく一文字変数にiってみるんだけど
なんか理由あるの?
0031デフォルトの名無しさん2005/08/08(月) 19:13:57
>>30
fortranはIからNで始まる変数名は整数型と決まっていた。
その頃からの流れで、Iterationの頭文字でもあることから
basicやCでも未だにi一文字の変数名が幅を利かせている。
0032デフォルトの名無しさん2005/08/08(月) 19:14:36
iterator の i だったり int の i だったり、習慣や慣れだったり。
0033デフォルトの名無しさん2005/08/08(月) 19:25:07
iterator では it 派の漏れ
0034342005/08/08(月) 19:50:47
質問です。
ファイル読み込みの時に1行ずつファイル名を書いて読み込ませるのが、とても面倒臭く苦しんでおります。
ファイル名に数字を入れてループ文を使い一気に読み込ませる方法があると聞きましたが詳しいやり方がわかりません。
すみませんが、教えてください。
0035デフォルトの名無しさん2005/08/08(月) 19:53:35
>>34
書いてるまんま
0036デフォルトの名無しさんNGNG
>>34
そのファイルの命名に、規則性があれば、いくらでもやりようがあるけど。
0037342005/08/08(月) 19:57:51
自分の考えではファイル名をa*.txtという風にして*を0からの数字にしようと思っているのですが、

for(int i=0;i<10;i++)
{
ファイル読み込み("a"+i+".txt");
}
のようにやってみたのですがうまく行きません。
まいりました・・。
0038デフォルトの名無しさん2005/08/08(月) 19:58:46
sprintf()って知ってる?
■ このスレッドは過去ログ倉庫に格納されています