[過去ログ] プログラミングのお題スレ Part21 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
684(4): デフォルトの名無しさん [] 2023/05/18(木) 14:03:59.67 ID:ftT7G5Yt(1) AAS
>> 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");
}
686: デフォルトの名無しさん [sage] 2023/05/20(土) 00:00:46.48 ID:q76PMxZe(1) AAS
>>684
よくあるバグ入でかつ分かりやすい速度向上の余地を持つ良い例だ
687: デフォルトの名無しさん [] 2023/05/20(土) 05:48:17.89 ID:Hm5OPlrQ(1/7) AAS
>>684
そのプログラムは char 一つで1文字を表す文字コード以外ではまともに動かない。
80文字以上の入力でバッファーオーバーランする。
dmy[] 配列の最後の次のメモリに \0 以外のゴミが入っていたら strcmp() が想定した通りに動かない。
691(2): デフォルトの名無しさん [] 2023/05/20(土) 17:36:52.34 ID:Hm5OPlrQ(5/7) AAS
>>676676(7): デフォルトの名無しさん [sage] 2023/05/16(火) 15:16:43.16 ID:U8LQq92Y(1/2) AAS
回分かどうか判定するプログラムを書きなさい。回分とは逆から読んでも同じ文である。
例 step on no pets
使用言語 C
C
Locale 考慮して wchar_t 使って書いた。日本語読ませても処理できる。
但しやってることは文字列の順序入れ替えて比較しているだけなので>>684と考え方は同じ。
(書きながら一々メモリ確保して逆順に並べなくても出来ると気付いたがそれは後で公開する)。
入力元が Unicode になっていた場合は濁点半濁点の合成文字みたいなのもあって MacOS でやった時とその他 OS で違ってしまうかも知れないが、その辺は考慮されていない。
外部リンク:paiza.io
694: デフォルトの名無しさん [sage] 2023/05/21(日) 09:10:07.45 ID:Gjp34WdD(1) AAS
>>684 gets()のかわりにfgets()を使うと改行を含んでしまうので\0で埋めてやらないといけない。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.035s