[過去ログ]
プログラミングのお題スレ Part21 (1002レス)
プログラミングのお題スレ Part21 http://mevius.5ch.net/test/read.cgi/tech/1668333636/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
684: デフォルトの名無しさん [] 2023/05/18(木) 14:03:59.67 ID:ftT7G5Yt >> 676 の回答例を載せときます #include <stdio.h> #include <string.h> void kaibun_judge(char *str); int main(void) { char ss[80]; printf("文字列を入力してください "); gets(ss); kaibun_judge(ss); } void kaibun_judge(char *str) { char *p, *q, dmy[strlen(str)]; p = str; q = dmy; for (int i = strlen(str)-1;i >= 0;i--) { dmy[i] = *p++; } if (strcmp(str, dmy) == 0) printf("回文です\n"); else printf("回分ではありません\n"); } http://mevius.5ch.net/test/read.cgi/tech/1668333636/684
686: デフォルトの名無しさん [sage] 2023/05/20(土) 00:00:46.48 ID:q76PMxZe >>684 よくあるバグ入でかつ分かりやすい速度向上の余地を持つ良い例だ http://mevius.5ch.net/test/read.cgi/tech/1668333636/686
687: デフォルトの名無しさん [] 2023/05/20(土) 05:48:17.89 ID:Hm5OPlrQ >>684 そのプログラムは char 一つで1文字を表す文字コード以外ではまともに動かない。 80文字以上の入力でバッファーオーバーランする。 dmy[] 配列の最後の次のメモリに \0 以外のゴミが入っていたら strcmp() が想定した通りに動かない。 http://mevius.5ch.net/test/read.cgi/tech/1668333636/687
691: デフォルトの名無しさん [] 2023/05/20(土) 17:36:52.34 ID:Hm5OPlrQ >>676 C Locale 考慮して wchar_t 使って書いた。日本語読ませても処理できる。 但しやってることは文字列の順序入れ替えて比較しているだけなので>>684と考え方は同じ。 (書きながら一々メモリ確保して逆順に並べなくても出来ると気付いたがそれは後で公開する)。 入力元が Unicode になっていた場合は濁点半濁点の合成文字みたいなのもあって MacOS でやった時とその他 OS で違ってしまうかも知れないが、その辺は考慮されていない。 https://paiza.io/projects/YXLsX3FqAsVF6DVDxye7bA http://mevius.5ch.net/test/read.cgi/tech/1668333636/691
694: デフォルトの名無しさん [sage] 2023/05/21(日) 09:10:07.45 ID:Gjp34WdD >>684 gets()のかわりにfgets()を使うと改行を含んでしまうので\0で埋めてやらないといけない。 http://mevius.5ch.net/test/read.cgi/tech/1668333636/694
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.039s