C言語関係掲示板

過去ログ

No693 文字列から数字を取り除いた文字列へしたい

[戻る] [ホームページ]
No.8133

文字列から数字を取り除いた文字列へしたいのですが・・・
投稿者---くー(2003/07/09 08:22:41)


いろいろ過去ログ掲示板などを参考にさせていただいたのですが、
文字列から数字を取り除くプログラム((例:"age4m71g"と入力したときは、"agemg"と出力する。)を作っているのですが、なかなかうまくいきません。どなたか以下のプログラムの間違っているところの手直しなどをしていただける方はいらっしゃいませんか?よろしくお願いします。

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

void del_digit(char str[])
{
unsigned i=0;
while(str[i]!='\0'){
if(!str[i]=='0' || !str[i]=='1' ||
!str[i]=='2' || !str[i]=='3' ||
!str[i]=='4' || !str[i]=='5' ||
!str[i]=='6' || !str[i]=='7' ||
!str[i]=='8' || !str[i]=='9' )    
     scanf("%s",str[i]);
i++;
}
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s",str);

del_digit(str);
printf("数字無し文字:%s\n",str);

return(0);
}


No.8135

Re:文字列から数字を取り除いた文字列へしたいのですが・・・
投稿者---YuO(2003/07/09 08:35:12)


>いろいろ過去ログ掲示板などを参考にさせていただいたのですが、
>文字列から数字を取り除くプログラム((例:"age4m71g"と入力したときは、"agemg"と出力する。)を作っているのですが、なかなかうまくいきません。どなたか以下のプログラムの間違っているところの手直しなどをしていただける方はいらっしゃいませんか?よろしくお願いします。

http://www.mtakahashi.com/cgi.cgi?08851
を読む限り,printfとscanfについての知識が不足しているようですね。
#つーか,del_digitが余計わけわからないものになっている……。


それから,複数の掲示板で質問すること(マルチポスト)は嫌われますよ。
マルチポストが発覚すると,それだけで有効回答が減ります。


No.8139

Re:文字列から数字を取り除いた文字列へしたいのですが・・・
投稿者---くー(2003/07/09 09:41:51)


わかりました・・・すんません。

No.8140

Re:文字列から数字を取り除いた文字列へしたいのですが・・・
投稿者---nop(2003/07/09 10:13:00)


>いろいろ過去ログ掲示板などを参考にさせていただいたのですが、
>文字列から数字を取り除くプログラム((例:"age4m71g"と入力したときは、"agemg"と出力する。)を作っているのですが、なかなかうまくいきません。どなたか以下のプログラムの間違っているところの手直しなどをしていただける方はいらっしゃいませんか?よろしくお願いします。

こんな感じで如何でしょう?

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


/* ************************************************************
    関数名【 del_digit() 】
        文字列数字削除処理関数
    処理概要
        与えられた文字列から数字のみを削除する
    引数
        1) str : 数字を削除したい文字列
    戻り値
        削除後文字列
    注意事項
        引数で指定された文字列の内容を直接書き換えます。
        バッファの内容が変更されては困る場合には、
        作業バッファを作成し、その作業バッファのポインタを
        引数として指定すること。
************************************************************ */
char    *del_digit( char *str )
{
    /* ***** 内部変数定義 ***** */
    char    *ret = str;
    int     i;

    if( str )    /* NULL ポインタ以外か? */
    {
        while( *str )    /* 文字列終端までループ */
        {
            if( isdigit(*str) )    /* 数字か? */
            {
                /* ****************************************
                    チェック対象の文字を削除する
                **************************************** */
                for( i=0; str[i]; i++ )    /* チェック対象から文字列終端までループ */
                {
                    /* ***** 現在の位置に後ろの文字を上書き ***** */
                    str[i] = str[i+1];
                }
            }
            else
            {
                /* ***** チェック対象を次の文字へ ***** */
                str++;
            }
        }
    }
    return ret;
}