これまでで一番「情けなかったとき」はいつですか?

C言語の質問です。文字列str中の数字文字を削除する関数をポインタを使って作りたいのですが、どう作ったらいいかわかりません。方向性だけでも教えてくれませんか。
ちなみにヒントとして以下の部分は与えられてました。よろしくお願いします。
void del_digit(char *str)
{
char *ptr = str;
while(*str){

A 回答 (4件)

strの中身から数字をなくす方法


#include<stdio.h>
void del_digit(char *str);
int main(void)
{
char *str = "abcd234678efg";
del_digit(str);
puts(str);
return 0;
}
void del_digit(char *str)
{
char *ptr = str;
int i = 0;
while(*ptr != '\0')
{
if(*ptr < '0' || *ptr > '9')
{
*(str+i) = *ptr;
i++;
}
ptr++;
}
*(str+i) = '\0';
}
    • good
    • 0

まあ、簡単に2バイトコードとか考えないで作るなら。


2バイトコード判定するなら2バイトコードの後の1バイトは判定しない様に処理増やして。

void del_digit(char *str)
{
char *ptr = str;

/* 引数のNULLチェック */
if(str == NULL){
return;
}
while(*str){
if(((*str) < '0') || ('9' < (*str))){
/* 数字と一致しなければコピー */
*ptr = *str;
ptr++;
}
str++;
}
*ptr = NULL;
}
    • good
    • 1

ひとつの方向性としては、



与えられた文字列と同じサイズのバッファを別途用意し、与えられた文字列の先頭から1文字ずつたどりながら数字以外であったらその文字を用意したバッファに書き込んでいく。最後までたどり終わったらバッファにお望みの文字列が入っているはずです。

というのがアルゴリズムとしてはわかりやすいとおもいます。
    • good
    • 0

削除した部分はどうするのですか?


*str="abcd234678efg"
なら
"abcdefg\0"
になるようにしたいんですか?

この回答への補足

そうです。すみません説明不足でした。

補足日時:2005/11/13 22:38
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報