プロが教えるわが家の防犯対策術!

#include <stdio.h>

void del_digit(char str[])
{
unsigned i = 0, count = 0;

while (str[i]) {
if(str[i] >= '0' && str[i] <= '9') {
count++;
}
else {
str[i - count] = str[i];
}
i++;
}
str[i - count] = '\0';
}

str内の全ての数字を削除する関数です。

AB1C9と入力するとABCと表示されます。

まずwhile (str[i])のとこのiは5までいくと思います。

5まで行った時にstr[5]は\0だからelseのほうに行ってstr[5- 2] = str[5];という風に処理されると思います。

その段階でstr[3]には¥0が入っていると思うのですが最後に
str[5- 2] = '\0';でまたstr[3]に\0を入れる処理をしているのはなぜなんでしょうか?

最後のstr[i - count] = '\0';を消して実行してみると
「ABCC9」と表示されてしまいます。

教えてくださいm(_ _ )m

A 回答 (1件)

>5まで行った時にstr[5]は\0だからelseのほうに行って



これは正しくないのではないでしょうか。
str[5]は'\0'だから、ifもelseも通らずに、while文のループを抜けると思います。
    • good
    • 0
この回答へのお礼

わかりました。ありがとうございますm(_ _ )m

お礼日時:2012/10/30 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!