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

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

 詳しくはこちら


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

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


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

No.23351

文字列中の文字のチェックについて
投稿者---つよし(2005/09/28 01:32:41)


文字列中に以下の文字が存在するかチェックし、存在した場合、文字列中から
取り除きたいいのですが、チェックする処理についてアドバイスお願いします。
取り除く文字
半角文字のスペース、_、%、*
全角文字のスペース、_%、*


1.1バイト文字か2バイト文字かチェックする
2.1バイト文字だったら1バイトの半角スペース、"_"、"%"等であるか判断する。
2.2バイト文字だったら次の文字を読み込み、2バイト文字を抽出する。
3.抽出した文字をstrcmp関数でチェックしたい文字か判断する。
4.文字列の最後まで繰り返す。
のような感じでしょうか。

アドバイスお願いします。

私が以前、質問しました件について何かあったのでしょうか。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列中の文字のチェックについて 23353 Blue 2005/09/28 08:39:36


No.23353

Re:文字列中の文字のチェックについて
投稿者---Blue(2005/09/28 08:39:36)


マルチバイト文字列の処理は文字コードによる環境依存になります。
環境が明示されていないと、あなたの望んだ回答が得られる可能性が低くなります。

OS、コンパイラを明記してください。
# というか、掲示板の注意にあるとおり必ず明記しなければいけないです。
それと、どのようなインタフェース(関数宣言)にするか、
できているところまでのソースを載せたほうがいいです。



この投稿にコメントする

削除パスワード

No.23355

Re:文字列中の文字のチェックについて
投稿者---つよし(2005/09/28 10:58:42)


ありがとうございます。
環境は、UNIXで、Solaris8です。

作ってみます。
それで、分からない点がでてきましたら再度、質問します。



この投稿にコメントする

削除パスワード

No.23360

Re:文字列中の文字のチェックについて
投稿者---つよし(2005/09/28 13:44:55)


環境は、
UNIXでSolaris8です。
コンパイルはgccです。

以下の様にしてみました。
2個目のwhileループ「while(buf@i])」に入ってくれないのですが
何故でしょうか。

#include <stdio.h>

#define is_zen(c) ((c & 0xFF) >= 0x81 && (c & 0xFF) <= 0x9F || (c & 0xFF) >= 0xE0 && (c & 0xFF) <= 0xFC)

main()
{
    char buf[256];
    char c;
    char p[2];
    int  i;

    while (fgets(buf, sizeof buf, stdin)) {
        buf[strlen(buf)-1] = '\0';
        printf("buf [%s]\n",buf);

        while(buf[i]) {
            c = buf[i] ;
            if (is_zen(c)) {
                p[0] = buf[i];
                p[1] = buf[i+1];
                printf("全角文字\n") ;
                printf("[%s]\n",p);
                i++;
            } else {
                printf("半角文字\n") ;
                printf("[%c]\n",buf[i]);
            }
            i++;
        }
    }
}




この投稿にコメントする

削除パスワード

No.23363

Re:文字列中の文字のチェックについて
投稿者---まきじ(2005/09/28 14:11:33)


>int i;
>while(buf[i]) {

i が初期化されていないからです。


この投稿にコメントする

削除パスワード

No.23365

Re:文字列中の文字のチェックについて
投稿者---Blue(2005/09/28 14:13:46)


iを初期化していないからでは?
文字列の先頭から見ないといけないからね。

ところで、
is_zen
は自作のマクロですか?
UNIXってEUCだと思っていたけど違うのかな。



この投稿にコメントする

削除パスワード

No.23376

Re:文字列中の文字のチェックについて
投稿者---つよし(2005/09/28 15:32:46)


ありがとうございます。

そうです。OSのコードは、EUCです。
マクロは、シフトJISで考えていました。
EUCコード対応にしなければいけないというこですね。


この投稿にコメントする

削除パスワード

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