【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21450

全角のスペースチェック
投稿者---オーシャン(2005/06/14 23:41:39)


文字列が全て全角のスペースかをチェックする処理です。
全角スペースと他の全角か半角が含まれていた場合は、0を
返し、全てが全角スペースの場合は、-1を返しています。

処理としては、動きますが、もう少し、いいものしたいので
すが、他に方法はありますか。


#include <stdion.h>

main()
{
    char str[64] ;
    int  ret ;
    memset(str,'\0',sizeof str) :

    strcpy(str,"     ") ;

    ret = allzenspace(str) ;
    if (ret != 0) {
        printf("NG\n") ;
    }
}

int allzenspace(const char *str)
{
    unsigned char c ;
    char tmp[3] ;

    if (*str == '\0') return(-1) ;

    memset(tmp,'\0',sizeof tmp) ;
    while (c = *str++) {
        if (c != 0x81) {
            return(0) ;
        } else {
            strncpy(tmp,str-1,2) ;
            if (strcmp(tmp," ") != 0) {
                return(0) ;
            }
            str++ ;
        }
    }

    if (strlen(str) == 0) {
        return(-1) ;
    } else {
        return(0) ;
    }
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:全角のスペースチェック 21456 Blue 2005/06/15 01:26:28
<子記事> Re:全角のスペースチェック 21457 ぽこ 2005/06/15 01:28:05


No.21456

Re:全角のスペースチェック
投稿者---Blue(2005/06/15 01:26:28)


そのまえに仕様を確認すべきでしょう。
>文字列が全て全角のスペースかをチェックする処理です。
>全角スペースと他の全角か半角が含まれていた場合は、0を
>返し、全てが全角スペースの場合は、-1を返しています。
仕様(○ = あり, × = なし )
全角空白その他の文字戻り値
××既定なし
×-1
×既定なし
0


allzenspace関数
全角空白その他の文字戻り値
××-1
×-1
×0
0


strncmpを使うと効率よくなると思います。
それと、
allzenspaceの後半部分の長さチェックはいらないのでは。


この投稿にコメントする

削除パスワード

No.21459

Re:全角のスペースチェック
投稿者---オーシャン(2005/06/15 02:48:28)


>strncmpを使うと効率よくなると思います。
>それと、
>allzenspaceの後半部分の長さチェックはいらないのでは。
allzenspaceの後半の長さチェックはいらないですね。

全角スペースでなければ(文字列中に全角スペース以外の文字があれば)、
”0”を返す。
while文が最後まで行くということは、全て全角スペースだということに
なるので、必然と、”-1”を返すことになる。
確かに、いらないですね。



この投稿にコメントする

削除パスワード

No.21457

Re:全角のスペースチェック
投稿者---ぽこ(2005/06/15 01:28:05)


>処理としては、動きますが、もう少し、いいものしたいので
>すが、他に方法はありますか。

私ならこう書くかなあ。。
#日本語処理をちゃんと勉強したことないので自信がありませんが。。

int
allzenspace(const char *str)
{
    const unsigned char * p = (const unsigned char *)str;

    for(; *p && *p == 0x81 && *(p+1) == 0x40 ; p+=2);

    return *p ? 0 : -1;
}




この投稿にコメントする

削除パスワード

No.21458

見かけない演算なので教えてください。
投稿者---凪(2005/06/15 01:53:49)


>for(; *p && *p == 0x81 && *(p+1) == 0x40 ; p+=2);
>return *p ? 0 : -1;
の演算について教えてください。




この投稿にコメントする

削除パスワード

No.21460

Re:見かけない演算なので教えてください。
投稿者---RAPT(2005/06/15 07:06:57)


>>for(; *p && *p == 0x81 && *(p+1) == 0x40 ; p+=2);
>>return *p ? 0 : -1;
>の演算について教えてください。
文字コードによる比較です。「文字コード SHIFTJIS」で検索してみては?


この投稿にコメントする

削除パスワード

No.21461

Re:見かけない演算なので教えてください。
投稿者---nop(2005/06/15 09:05:38)


>の演算について教えてください。

>> *
>> &&
>> ==
>> +
>> +=
>> ? :

出現している演算子を並べてみました。
どの演算子がわからないのでしょうか?

と言うか、演算子がわからないのであれば、
ご使用になっている本で調べてみては如何でしょうか?


この投稿にコメントする

削除パスワード

No.21462

Re:見かけない演算なので教えてください。
投稿者---凪(2005/06/15 12:46:21)


>return *p ? 0 : -1;
リターンで返却している値の判定、動きの解釈について
教えてください。




この投稿にコメントする

削除パスワード

No.21463

Re:見かけない演算なので教えてください。
投稿者---shu(2005/06/15 12:49:11)


http://www9.plala.or.jp/sgwr-t/c/sec14.html#s14-3


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧