[過去ログ] 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(3): デフォルトの名無しさん [] 2017/11/04(土) 16:33:35 ID:NYxCuvMY(1) AAS
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
外部リンク:codepad.org
外部リンク:ideone.com
前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
2chスレ:tech
2: デフォルトの名無しさん [] 2017/11/05(日) 17:44:45 ID:rSDVGL6P(1) AAS
>>1
乙
3(3): デフォルトの名無しさん [sage] 2017/11/05(日) 20:58:13 ID:80sy7ZoV(1) AAS
unsigned long strtoulxn( char const* psz, size_t n )
{
unsigned long v;
for ( v = 0; *psz && n--; psz++ ) {
if ( ! isdigit( *psz ) ) {
continue;
}
v = 10 * v + ( *psz - '0' );
}
return v;
}
4: デフォルトの名無しさん [sage] 2017/11/05(日) 21:07:57 ID:i5zx7IeJ(1) AAS
これは酷いクソコード
5(1): デフォルトの名無しさん [sage] 2017/11/05(日) 22:25:14 ID:NxjjuMpf(1) AAS
実行速度
見やすさ
汎用性
コードサイズ
どれかひとつ位は満たさないと
6: デフォルトの名無しさん [sage] 2017/11/05(日) 22:42:14 ID:3uuR82Hq(1) AAS
>>5
まあそう言うごたくを言うのは一つぐらいは満たしたコードを書いてからでないとね
7: デフォルトの名無しさん [sage] 2017/11/06(月) 08:01:53 ID:uTTN+kxR(1) AAS
>>3 の関数は前のスレッドの終わりに出た
"12 34 56"(NUL終端なし8byte) を数値の 123456 に変換、
てお題の答案かな。
…と思ったけど、NUL終端文字列が仮定されてるね。
どういう流れで投稿されたんだろう?
8: デフォルトの名無しさん [sage] 2017/11/06(月) 08:45:24 ID:H37qYFYx(1) AAS
size_t n で文字数を受けとるからNUL終端である必要は無いのでは
9(1): デフォルトの名無しさん [sage] 2017/11/06(月) 09:40:14 ID:L15YU14L(1) AAS
if (strncmp(psz, "12 34 56", 8) == 0) return 123456;
10(2): デフォルトの名無しさん [sage] 2017/11/06(月) 23:29:19 ID:OMQOLu1z(1) AAS
相変わらず片山はクソコードしか書かないな
""だと不定値返る数値変換なんてゴミ
11: デフォルトの名無しさん [sage] 2017/11/06(月) 23:59:53 ID:/gW4r5bt(1) AAS
>>10
確かにクソコードだが不定値は返らんぞ
12: デフォルトの名無しさん [sage] 2017/11/07(火) 04:37:45 ID:T7zw8VZw(1/3) AAS
>>9 は質問者に対する皮肉のつもりだったんだけど
13: デフォルトの名無しさん [sage] 2017/11/07(火) 04:47:47 ID:T7zw8VZw(2/3) AAS
意図的に糞コードを書いた事もわからないクソがいるとは
こんな簡単なコードの動作も理解できてないようだし
14: デフォルトの名無しさん [sage] 2017/11/07(火) 06:16:53 ID:pkgJL5Ib(1) AAS
初心者歓迎をうたうスレッドで「意図的に『糞コード』を書いた」などと
しかも後付けで言われてもあんまり支持できないなぁ。
せめて最初から「お前らこれ改善してみろよ」とかで出してくれ。
「糞コード」とけなすだけで、具体的な問題点の指摘がないってのも寂しいわ。
>>3 のソース、引数のpszが""でも、nが0でも妥当な返り値 0 が返るけど、
実は最初に見たとき n==0 で呼ばれた場合に即時終了しないと騙されたわ。
後置デクリメント評価値、ね。
15: デフォルトの名無しさん [sage] 2017/11/07(火) 06:53:54 ID:+N0q+RZO(1) AAS
誰も騙してないのにクソみたいなプライドが高いな
16: デフォルトの名無しさん [sage] 2017/11/07(火) 07:08:01 ID:aXJpgdu1(1) AAS
出だしから勢いのいいうんこだな
何のスレか忘れてしまいそう
17: デフォルトの名無しさん [sage] 2017/11/07(火) 08:24:36 ID:FXbSqjpU(1/2) AAS
psz = "", n = 0 はいいけど
char a[8] で psz = a, n = 8 を渡すと不定値どころか鼻から悪魔の糞コード
仕様も理解せずに余計なことしてバグを作り込む知ったかの典型
18(1): デフォルトの名無しさん [sage] 2017/11/07(火) 08:32:51 ID:T7zw8VZw(3/3) AAS
>>3
●パフォーマンス
*pszが3回も出てくる
代入して持っておいた方が
チープなコンパイラでは速度が変わる
isdigit
どうせ数字が連続してる前提のコードなんだから
関数を呼ばずに'0' '9'と比較しちゃおう
そうのが速い
関数コールは一般的に遅い
●見やすさ
forループにいくつも入れない
while (n--) か for (size_t i= 0; i < n ; i++)
null文字はbreakで
●仕様
null文字とサイズ、両方で停止は仕様としては問題ない
パフォーマンス最優先であればそれぞれの特別版を作ればいい
文字数もスペースの位置も固定で
パフォーマンス最優先なら
ループアンロールするのが一番
19: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/11/07(火) 10:46:29 ID:BS6pey7a(1) AAS
>>10
人違い。
20: デフォルトの名無しさん [sage] 2017/11/07(火) 12:47:26 ID:FXbSqjpU(2/2) AAS
>>18
> null文字とサイズ、両方で停止は仕様としては問題ない
だからダメだっつーの
知ったかは黙ってろよ
最低限サイズチェックを先にやらないとダメ
21(1): デフォルトの名無しさん [sage] 2017/11/07(火) 13:22:08 ID:oMcRDniv(1) AAS
仕様として「両方で停止は問題ない」よな?
判別の順番は問題だ
順番が逆
そもそも相談者の仕様がおかしい
22(1): デフォルトの名無しさん [sage] 2017/11/07(火) 16:16:20 ID:3ER4WXnW(1) AAS
先に大きさでチェックしてから 内容の nul チェックする
for ( v = 0; n-- && *psz; psz++ ) {
これなら、存在しない指し先のデリファレンスしないし
ただ、
ショートサーキット前提の記述をよしとするかどうかはわからん
23(2): デフォルトの名無しさん [sage] 2017/11/07(火) 17:07:50 ID:Zpoup5pM(1/2) AAS
int str2i( const char *s, size_t n )
{
int v = 0;
while ( n-- ) {
char c = *s++;
if ( c == '?0' ) break;
if ( '0' <= c && c <= '9' ) v = v * 10 + ( c - '0' );
}
return v;
}
24: デフォルトの名無しさん [sage] 2017/11/07(火) 17:17:37 ID:jEe4bM6y(1) AAS
片山以外に文字化けするブラウザ使ってる奴いるのか
あとnull文字って初心者が背伸びしてる感じがして微笑ましいな
25: デフォルトの名無しさん [sage] 2017/11/07(火) 17:31:27 ID:Zpoup5pM(2/2) AAS
ソフト歴35年ですが
上下前次1-新書関写板覧索設栞歴
あと 977 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.184s*