strspn関数について

解決


ほるもん  2006-05-02 23:12:38  No: 61668

環境はXP、VC.NET(MFC)です。

int i = 0;
char W_TEST1[256];
char W_TEST2[256];

strcpy(W_TEST1,"t  "); ←tと全角スペースが入ってます。
strcpy(W_TEST2,"  ");  ←全角スペースが入ってます。

*****テストパターン①
i = (int)strspn(W_TEST1,"  ");←全角スペース
i が 0 となります。
*****テストパターン②
i = (int)strspn(W_TEST2,"  ");←全角スペース
i が 2 となります。

その為、全角スペースが入っている場合、エラーにすると言う
処理を作っているのですが、テストパターン①の時に、
0となってしまう為、うまくいきません。

何かアドバイスを頂けないでしょうか?
宜しくお願いします。


Oksana  2006-05-02 23:36:29  No: 61669

strspn() は第1引数から第2引数に"含まれない"文字が最初に
現れた位置を返すのですから、0 と 2 になるのが正しいと思います。
全角スペースが入っているかどうかだけを調べたいのでしたら
別の関数を使ったほうがいいと思いまよ。


ほるもん  2006-05-02 23:40:32  No: 61670

>全角スペースが入っているかどうかだけを調べたいのでしたら
>別の関数を使ったほうがいいと思いまよ。

その関数を教えて頂けないでしょうか?


Blue  2006-05-02 23:48:26  No: 61671

全角文字を考慮するならば、_mbsstr で。


subaru  2006-05-02 23:48:45  No: 61672

>その関数を教えて頂けないでしょうか?
たとえば_mbsstr()
#MFCならCStringにしてFindメソッドの方が楽だと思うけど。。。


Oksana  2006-05-02 23:49:08  No: 61673

全角スペースを検出したいとなるとマルチバイトの問題があるので、
ここは標準の関数ではなくて CString を使って CString::Find()
とかどうでしょう?MFCをお使のようなので CString でもいいですよね?
マルチバイト対応の文字列検索は自分でできないことはもちろん
ないですがかな〜り面倒なので。


Oksana  2006-05-02 23:51:48  No: 61674

すみません、脱字が...

×  お使のよう
○  お使いのよう


ほるもん  2006-05-03 00:25:40  No: 61675

>strspn() は第1引数から第2引数に"含まれない"文字が最初に
>現れた位置を返すのですから、0 と 2 になるのが正しいと思います。
strspnの使用方法を勘違いしてました。
勉強不足でした。

>ここは標準の関数ではなくて CString を使って CString::Find()
上手くいきました。(こんな便利なものがあるなんて。。。。)

Oksanaさん、Blueさん、subaruさん。
皆様。
お早い回答、本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加