文字列内の数字文字を削除する関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジェリナゲ
記事: 17
登録日時: 6年前

文字列内の数字文字を削除する関数

#1

投稿記事 by ジェリナゲ » 6年前

文字列内の数字文字を削除する関数を作成したのですが、(著 柴田望洋 解きながら学ぶC言語 p245)
数字文字が削除されません。入力したものがそのまま出力されます。
原因は26行目で *(str+i)とj は型が違うからifの条件が真になる? と思ったので (char*)j として試してみましたがダメでした。
なにがいけないのでしょうか、よろしくおねがいします

コード:

#include <stdio.h>

void del_digit(char *str);

int main(void){
  char str[100];

  printf("文字列を入力してください :");
  scanf("%s",str);

  del_digit(str);

  puts("数字文字を除去しました");
  printf("%s\n",str);

  return 0;

}

void del_digit(char *str){
  int i,j;
  int k=0;
  
  for(i=0;*(str+i);i++){
    for(j=0;j<10;j++){
      if(*(str+i)!=j){      
        *(str+(k++))=*(str+i);
	 break;
      }
    }
  }
  *(str+k)='\0';
  
  return ;

}

初級者
記事: 200
登録日時: 10年前

Re: 文字列内の数字文字を削除する関数

#2

投稿記事 by 初級者 » 6年前

25行目のjに関するfor文を

コード:

   for (j = '0'; j <= '9'; j++) {
にしたら、うまくいくかもしれません。
数値

数字
は別物です。

初級者
記事: 200
登録日時: 10年前

Re: 文字列内の数字文字を削除する関数

#3

投稿記事 by 初級者 » 6年前

または、

コード:

#include <ctype.h>
を追加して、25~26行目を

コード:

   if (isdigit(str[i]) {        // 数字ならば
にする方がよいかもしれません。

初級者
記事: 200
登録日時: 10年前

Re: 文字列内の数字文字を削除する関数

#4

投稿記事 by 初級者 » 6年前

というわけで

コード:

#include <stdio.h>
#include <ctype.h>

void del_digit(char *str);

int main(void)
{
   char str[100];

   printf("文字列を入力してください :");
   scanf("%s", str);
   del_digit(str);
   puts("数字文字を除去しました");
   printf("%s\n", str);
   return 0;
}

void del_digit(char *str)
{
   int i, j = 0;

   for (i = 0; str[i]; i++) {
       if (!isdigit(str[i])) {
           str[j++] = str[i];
       }
   }
   str[j] = '\0';
}

閉鎖

“C言語何でも質問掲示板” へ戻る