C言語関係掲示板

過去ログ

No777 ある文字列を探して 削除する

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

ある文字列を探して 削除する
投稿者---mari(2003/10/08 14:16:42)


ある文字列 「00123」があるとします。
この先頭の「00」がいらないので 削除したいのですが、
ある文字列の中の「00」の数は変化します。
なのでループで 1こずつ文字列を取り出して その取り出した文字列と
「0」を比較して イコールならば削除したいのですが、
考えがうかびません。ヒントだけでもよろしくお願いします。

No.9633

Re:ある文字列を探して 削除する
投稿者---なんでやねん(2003/10/08 14:59:59)


考えも何も、自分で
>1こずつ文字列を取り出して その取り出した文字列と
>「0」を比較して イコールならば削除したい
ってかいてんのやから、そのままソース書けばええとおもうけど?
ほかになにがわからへんのかな?
文字の取り出し方とか、比較の方法は自分で調べればすぐにわかるはずやで。

No.9668

Re:ある文字列を探して 削除する
投稿者---mari(2003/10/09 13:27:29)


>考えも何も、自分で
>>1こずつ文字列を取り出して その取り出した文字列と
>>「0」を比較して イコールならば削除したい
>ってかいてんのやから、そのままソース書けばええとおもうけど?
>ほかになにがわからへんのかな?
>文字の取り出し方とか、比較の方法は自分で調べればすぐにわかるはずやで。

すみません、考え方はわかるのですが
(VB経験ありで instr関数っぽいのが
Cでもあるかな?と思って検索しましたが見つからず。。。)
文字列の取り出し方(具体的は記述の方法)など
まったくわかりません。。。


No.9635

Re:ある文字列を探して 削除する
投稿者---ともじ(2003/10/08 15:07:11)


>ある文字列 「00123」があるとします。
>この先頭の「00」がいらないので 削除したいのですが、
>ある文字列の中の「00」の数は変化します。

sscanfを使うと、任意の文字列から不要な文字列を削除することができます。
たとえば、
    	sscanf("00123", "%*[0]%s", str);
とすると、先頭の"00"だけを削除することができます。
これは、"%[0]" で、先頭に続く'0'だけを読み取り、"*"で読み取った
'0'を代入抑止しているからです。

sscanfについては、過去ログのこちらに詳しい説明があるので参照してください。
http://f1.aaa.livedoor.jp/~pointc/log521.html



No.9642

Re:ある文字列を探して 削除する
投稿者---かずま(2003/10/08 18:39:12)


>        sscanf("00123", "%*[0]%s", str);
>
> とすると、先頭の"00"だけを削除することができます。

ひとつ注意しなければならないのは、%*[0] は、1個以上の連続する 0 を
読み飛ばすということです。たとえば、sscanf("45678", "%*[0]%s", str);
のように 0 がない場合、str に文字列は入りません。

ただし、Borland C++ だけは、バグのせいか、失敗した %*[0] を無視して
次の %s に進んでしまい、str には、"45678" が入ります。


文字列関数を使うとすれば、次のようなやりかたもできます。

    char a[] = "00123",  b[256];

    strcpy(b, a + strcpn(a, "0"));


No.9658

Re:ある文字列を探して 削除する
投稿者---ともじ(2003/10/08 22:20:52)


>ひとつ注意しなければならないのは、%*[0] は、1個以上の連続する 0 を
>読み飛ばすということです。たとえば、sscanf("45678", "%*[0]%s", str);
>のように 0 がない場合、str に文字列は入りません。

ご指摘ありがとうございます。0がない場合を考えていませんでした。

>文字列関数を使うとすれば、次のようなやりかたもできます。
>strcpy(b, a + strcpn(a, "0"));

これは、
strcpy(b, a + strspn(a, "0"));
の間違いでよろしいですね。




No.9659

Re:ある文字列を探して 削除する
投稿者---かずま(2003/10/08 23:40:01)


> これは、
> strcpy(b, a + strspn(a, "0"));
> の間違いでよろしいですね。

そうです。やっぱり、コンパイルして動いているプログラムから
コピー&ペーストしないとだめですね。


No.9639

Re:ある文字列を探して 削除する
投稿者---___(2003/10/08 15:43:04)


char a[100] ;
char b[100] ;
strcpy( a, "00123" );
sprintf(b, "%d", atoi(a) );

これじゃだめ?