07/12/19 23:21:25
VC++のstrstr系関数って、KMP法とかBM法で実装されてるんでしょうか?
それと、もし自分で実装するとしたらですが、KMPとBMのどちらが評判よいですか?
566:デフォルトの名無しさん
07/12/19 23:35:28
お帰りください
567:デフォルトの名無しさん
07/12/19 23:44:40
たぶんそんなのは使っていないと思う。
あまりにも短い文字列などだとかえって時間かかるから。
568:デフォルトの名無しさん
07/12/20 02:59:48
絶対使ってない、と言い切れるね。
1回しか使わない探索にテーブルのセットアップとかが無駄と言うのもあるけど
そもそも、そういうスキップする(全文字走査しない)アルゴリズムは
テキストの長さがあらかじめ判ってないと使えない。
そして、(strstrに渡す)文字列の長さをstrlenで調べてからBM法を使うくらいなら
長さを求める'\0'探しのついでに力任せ探索をするほうがずっとまし。
たとえ同じ文字列を何回も探索するような、初期化が必要ないケースでも。
569:デフォルトの名無しさん
07/12/21 00:21:03
ビット操作の練習をしています。符号あり2の補数表現の整数の符号を反転するコードは、
x=(~x)+1;とx=~(x-1);のどちらが適切でしょうか?
570:デフォルトの名無しさん
07/12/21 01:38:53
x=-x;
571:何を以って適切とするかが提示されていないから答えようがない罠
07/12/21 01:39:24
>>569
x *= -1;
572:デフォルトの名無しさん
07/12/21 04:13:19
このスレ的には2の補数表現を仮定してる時点で間違い
573:デフォルトの名無しさん
07/12/21 09:58:35
>>572 は誰に言ってるのか
574:デフォルトの名無しさん
07/12/21 10:09:03
>>573
>>570-571ではなかろうか
575:デフォルトの名無しさん
07/12/21 10:12:04
俺は>>569だと思った
576:デフォルトの名無しさん
07/12/21 11:02:23
>>569
xがunsignedならどっちも同じになるから、どっちでもいいよ。
577:デフォルトの名無しさん
07/12/21 11:52:01
>>576 符号ありと書いてあるが。
578:デフォルトの名無しさん
07/12/21 11:56:24
んー微妙だなw
579:デフォルトの名無しさん
07/12/21 13:00:08
構造体の定義で、たまに
struct X {
...
char tag[1];
}
とか書いてあるものがありますが([0]の場合もあり)、これは何でしょうか?
580:デフォルトの名無しさん
07/12/21 13:08:33
>>579
URLリンク(www.kouno.jp)
581:デフォルトの名無しさん
07/12/21 13:11:49
C FAQ 次スレからテンプレに入れよう
582:デフォルトの名無しさん
07/12/21 13:13:08
>>581
>>1にあるだろ。テンプレ嫁
583:デフォルトの名無しさん
07/12/21 13:15:32
あ、見落とした m(__
しかし、それが何であるかの説明にはなってないなw
しかしこのスレではスレ違いなので、
スレ立てるまでもない質問のほうに答えは書いておく。
584:デフォルトの名無しさん
07/12/21 13:57:03
どうせ規格の話になるんだし、ここで答えてもよかっただろうに。
分散して見づらくなる。
585:デフォルトの名無しさん
07/12/21 14:23:06
心得の意味がわかってないやつがいるなぁ
「わざとスレ違いな質問をする荒らしがいるのでそういうのは無視するか軽く流してください」
次からこう書かなきゃダメか?
586:デフォルトの名無しさん
07/12/21 14:34:52
何でスレ違いなのか、さっぱりわからない
587:デフォルトの名無しさん
07/12/21 14:42:27
>586
どの質問についての話なのかさっぱりわからない
>579についてのことなら、プログラム技法の質問であって規格の質問ではないからだ
588:デフォルトの名無しさん
07/12/21 14:43:51
え、いつからこのスレは規格オンリーなスレになったんだ?
589:デフォルトの名無しさん
07/12/21 14:43:54
何でしょうかって聞かれたらそれは
要素数が1のcharの配列です
としか答えられんよな
590:デフォルトの名無しさん
07/12/21 14:44:56
>>587
規格に準拠したC言語に関するスレであって、規格のスレではなかったはずだが。
591:デフォルトの名無しさん
07/12/21 14:45:53
だから>>579に対する答えは>>589で終わりだ
592:デフォルトの名無しさん
07/12/21 14:46:23
>>2
593:デフォルトの名無しさん
07/12/21 14:47:40
>>587みたいなキチガイが湧くから>>2の注意書きがあるってのに…
594:デフォルトの名無しさん
07/12/21 14:49:45
なんなの、この自治厨
595:デフォルトの名無しさん
07/12/21 14:51:46
なぜ「だから」なのか、さっぱりわからない
596:デフォルトの名無しさん
07/12/21 15:03:45
ざっとこのスレ見直したけど、いかにも>>587の気に食わなさそうな話題がたくさん見逃されてるよ。
何故?
597:デフォルトの名無しさん
07/12/21 15:05:58
なんかいろいろ言われてるけど
スレリンク(tech板:552番)
結局なぜ、こういう使いかたをするのかわからない
598:デフォルトの名無しさん
07/12/21 15:08:10
>>597
向こうで聞け
599:デフォルトの名無しさん
07/12/21 15:17:17
この書き方が文法的に正しいかも移植性が高いのかもともにはっきりしない。ただし、かなり幅広く使われている。この技法による実装は以下のようになる。
#include <stdlib.h>
#include <stdio.h>
struct name *makename(char *newname)
{
struct name *ret
=malloc(sizeof(struct name)-1 + strlen(newname)+1);
/* -1 は頭の [1] 用; +1 は \0 用 */
if(ret!=NULL){
ret->namelen = strlen(newname);
strcpy(ret->namestr, newname);
}
return ret;
}
上の関数は、name 構造体の実体を、引数で要求された名前を保持できるように(構造体の定義から想像する1文字ではなく)大きさを調整して割り付ける。
幅広く使われているけれど、この技はいささか悪名高い。……
以上、CFAQ初版より抜粋
600:デフォルトの名無しさん
07/12/21 16:48:26
なんで、
struct name {
int namelen;
char *namestr;
};
にしないんだろう?二回malloc/freeするのがイヤってことなのかな。
601:デフォルトの名無しさん
07/12/21 16:58:54
ファイルの入出力も1回で済んだしな
602:デフォルトの名無しさん
07/12/21 17:05:11
>>600
そのまま通信用バッファとかに使えるから、流行ってたんだと思う。
603:デフォルトの名無しさん
07/12/21 17:21:32
CG法のプログラムを完成させ、以下のA,bに対する解xを求めよ。
A:
-6.761582e-01 8.649824e-01 5.974179e-01 1.510212e-01 9.412452e-01
8.649824e-01 -9.466491e-01 9.172758e-02 9.491567e-02 3.673389e-01
5.974179e-01 9.172758e-02 8.015639e-01 -7.419281e-01 2.099383e-03
1.510212e-01 9.491567e-02 -7.419281e-01 -2.940182e-01 -6.722990e-01
9.412452e-01 3.673389e-01 2.099383e-03 -6.722990e-01 -8.416333e-01
b:
8.156371e+00
1.463224e+00
2.283493e-01
-6.422500e+00
-5.215142e+00
これってどうやったらできるんですかね?(>。<)
cg法自体よくわかってないんですが…
604:デフォルトの名無しさん
07/12/21 17:22:17
これこそ、正にスレ違いだな。
605:デフォルトの名無しさん
07/12/21 17:26:04
連立方程式の開放の一つだろ
606:デフォルトの名無しさん
07/12/21 17:35:03
URLリンク(ja.wikipedia.org)
607:デフォルトの名無しさん
07/12/21 17:38:06
Lesson6 連立方程式-大規模疎行列-(不完全Colesky分解)
Lesson7 連立方程式-大規模疎行列(前処理つきICG法)
URLリンク(www.saitama-u.ac.jp)
608:597
07/12/21 17:44:58
>>599
なるほどーよくわかりました。
やっぱり、>>600のように書いたほうがいいですね。
609:デフォルトの名無しさん
07/12/21 17:45:59
共益勾配法のことか。
なつかしー。BCG法とかもやらされたなあ・・・
610:デフォルトの名無しさん
07/12/21 19:49:22
処理系依存の話ではなくANSI Cとしての話ですが、
シフト演算で、シフト量が0の場合の挙動は定義されているのかな?
それとも未定義?
int x;
x>>= 0:
x<<=0;
とかした場合
611:デフォルトの名無しさん
07/12/21 19:53:12
変化無し
612:610
07/12/21 20:16:42
>>611
どもです。
ANSI C ( JISX3010)
URLリンク(www.jisc.go.jp)
をぱらぱら読んでみましたが、
6.5.7 ビット単位のシフト演算子
を読む限り、負数の場合は未定義とはありますが、0に関しては
特に述べられてませんね。
どの処理系でも
(x >>= 0) == x
(x <<= 0) == x
と想定してFA?
613:デフォルトの名無しさん
07/12/21 20:22:21
c<<(m-n)
という式ではm-n=0という場合もある
614:デフォルトの名無しさん
07/12/21 23:50:39
>612
x >= 0 ならね。厳密に解釈するなら x < 0 なら << は未定義、>> は処理系定義。
615:610
07/12/23 23:40:58
>>614
どうもです。でしたらunsigned int なら大丈夫ですね。
616:デフォルトの名無しさん
07/12/23 23:54:53
>>599あたりの話なんですが、
なぜこの技法はだめなんですか?
特に問題なさそうに思えるんですが
617:デフォルトの名無しさん
07/12/23 23:59:05
C89の規格に「やってもよい」と明記はされてないから。C99なら問題ない。
618:デフォルトの名無しさん
07/12/24 00:03:12
規格を厳密に解釈すると、駄目ということになるから。
URLリンク(www.kouno.jp)
619:デフォルトの名無しさん
07/12/24 00:14:46
Windowsもbitmap周りでやってたな
620:デフォルトの名無しさん
07/12/24 09:56:51
C99 ならサイズ無しで書いとけば可変長メンバが使えるようになったね。
621:デフォルトの名無しさん
07/12/24 10:19:28
>>617
ahosugi
622:デフォルトの名無しさん
07/12/24 10:21:23
>>620
なんで何度も出てることを新しい情報のように紹介してくれるの?
623:デフォルトの名無しさん
07/12/24 10:32:47
安部さんが首相を辞任したね
624:デフォルトの名無しさん
07/12/24 10:47:43
中日ドラゴンズが日本一になったね
625:デフォルトの名無しさん
07/12/24 10:53:53
C99対応のコンパイラってGCCぐらいかな?
626:デフォルトの名無しさん
07/12/24 10:55:47
GCCがC99に対応したね
627:デフォルトの名無しさん
07/12/24 10:56:34
そう。でもGCCでも完璧に対応してるわけじゃないけどね。
URLリンク(gcc.gnu.org)
628:デフォルトの名無しさん
07/12/24 11:09:16
DMCをお忘れではありませんか。
こっちも完璧ではないけどね。
629:デフォルトの名無しさん
07/12/24 11:12:56
VCも少しは見習え
630:デフォルトの名無しさん
07/12/24 11:48:35
数年前のC99をいまだ対応させないコンパイラって・・・
昔との互換性?それとも技術的に改良部分が多いのか?難しいのか?
よくわからないけど
631:デフォルトの名無しさん
07/12/24 11:50:12
そりゃC99に対応させても努力が多いわりに実入りが少ないなら
当然じゃない?ビジネス的にはC++かC#を使ってってこと。
632:デフォルトの名無しさん
07/12/24 13:02:19
iccはc99だし、SunWorksのccもc99だけどね。
633:デフォルトの名無しさん
07/12/24 13:20:11
>>629
620は、少なくともVC++ 7.1以上なら独自拡張扱いで使える。
URLリンク(msdn2.microsoft.com)(VS.71).aspx
634:デフォルトの名無しさん
07/12/24 21:17:49
fread関数でサーバーにあるファイル(ファイルサイズ1G)を読む際、
読込みサイズを32*1024*1024にするとエラーがおきなくて、
読込みサイズをファイルサイズにするとエラーが起きるのはどうしてでしょうか
?
どなたかご教授下さいm(_願_)m
635:デフォルトの名無しさん
07/12/24 21:21:44
そんなに大量のメモリをいっぺんに確保できていないのだろう。
636:デフォルトの名無しさん
07/12/24 21:23:47
エラーってなんだよ
637:デフォルトの名無しさん
07/12/24 22:07:40
634です。
スレ違いでした。失礼しました。
638:デフォルトの名無しさん
07/12/25 00:36:13
規格の話以外はスレ違いだと騒ぐのに、コンパイラの話になると嬉々として話題に加わる
639:デフォルトの名無しさん
07/12/25 00:49:57
>>638
なんでそう必死なんだ。
640:デフォルトの名無しさん
07/12/25 00:52:13
コンパイラの規格準拠度なんて、まさにこのスレの守備範囲だろ。
641:デフォルトの名無しさん
07/12/25 21:23:25
実装に特化したスレってあったっけ?
642:デフォルトの名無しさん
07/12/25 21:23:58
↑「実装すること」に特化した
643:デフォルトの名無しさん
07/12/25 21:27:32
「コンパイラ・スクリプトエンジン」相談室12
スレリンク(tech板)
とかか?