- 締切済み
入力された文字列の中の数字を全てを削除するプログラム(C言語)
入力された文字列の中の数字を全てを削除するプログラム(C言語) 柴田望洋さんの「明解C言語入門編」という本の演習11-5に当たるこのプログラムの作り方がどうしてもわかりません。 なんとか書いてみましたが、実行してもうまくいきません。 どこが悪いのか自分でもわかりません。 誰か教えてくださいお願いします。 以下が僕が書いたコードです。 #include<stdio.h> void del_digit(char *str){ unsigned i=0; char *a; while(*(str+i)){ if(*(str+i)<0 || *(str+i)>9) *a++=*(str+i); i++; } printf("%s",a); } int main(){ char *str; scanf(" %s",str); del_digit(str); return 0; }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- magicalpass
- ベストアンサー率58% (378/648)
回答No.4
a の領域が獲得されていないのはすでに指摘のとおりですが、もうひとつ。 このままでは a に文字列の終端が設定されていないので、a の領域が0クリアされていない場合はprintfの出力は後ろにゴミが連なったものになってしまいます。
- KAZUMI2003
- ベストアンサー率37% (77/208)
回答No.3
No.2ですが、あと、数字判断のとこ *(str+i)<0 → *(str+i) < '0' 9もおんなじ。
- KAZUMI2003
- ベストアンサー率37% (77/208)
回答No.2
mainのstrと、del_digitのaは、それぞれ、ポインタを確保しただけの状態なので、mallocなどで、領域を確保してください。
- SaKaKashi
- ベストアンサー率24% (755/3136)
回答No.1
>なんとか書いてみましたが、実行してもうまくいきません。 どのようにうまくいかないのですか? プログラムはあなたの作ったとおりに動きます。
補足
すみません。 コンパイル自体はちゃんとできたんですが、入力しても何も表示されません。数字以外の文字ですらです。 何回も見直しましたがどこが間違えているのかさっぱりです。