C言語関係掲示板

過去ログ

No809 文字列から半角全角スペースを削除

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

空白を取り除く方法
投稿者---とまと(2003/10/31 17:17:22)


掲題の件、ご教授ください。
文字列の中から、
1バイトスペースと
2バイトスペースを取り除きたいのですが
どのような処理をすればよろしいでしょうか?

環境はUNIXです。

宜しくお願い致します。

No.10221

Re:空白を取り除く方法
投稿者---モラウ2(2003/10/31 21:42:02)


いっこいっこ文字を取り出してはチェックだね

No.10223

Re:空白を取り除く方法
投稿者---ceybord(2003/11/01 01:48:18)


1バイトスペースはSJISのA0が使われることはないと思うので、
十進の32で十分だと思いますが、
2バイトスペースは、使用している文字コードに依存します。
詳しいことは、「8140」,「A1A1」あたりで検索してみてください。

No.10225

Re:空白を取り除く方法
投稿者---すがりん(2003/11/01 15:08:47)


>1バイトスペースと
>2バイトスペースを取り除きたいのですが
>どのような処理をすればよろしいでしょうか?

2バイト文字はASCII文字以外から始まりますからそこで処理を分けます。

#include <stdio.h>
#include <ctype.h>

void despace(char const *str, char *dest)
{
    int i = 0, j = 0;

    do {
	if (isascii(str[i])) { /* または ((str[i]) & ~0x7f) == 0) */
	    if (str[i] != ' ') {
		dest[j] = str[i];
		j++;
	    }
	    i++;
	} else {
	    if (!(str[i] == " "[0] && str[i+1] == " "[1])) {
		dest[j] = str[i];
		dest[j+1] = str[i+1];
		j += 2;
	    }
	    i += 2;
	}
    } while (dest[j-1] != '\0');
}

int main(void)
{
    char str[] = "ho◆、¥ ge piy oo=@oo\to";
    int i;

    printf("%s\n", str);
    despace(str, str);
    printf("%s\n", str);
}


No.10226

Re:空白を取り除く方法
投稿者---すがりん(2003/11/01 15:52:42)


あ゛何かすごいミスをしたかもしれないので変えます。(ループだけ)

    for (;;) {
	if (isascii(str[i])) { /* または ((str[i]) & ~0x7f) == 0) */
	    if (str[i] != ' ') {
		dest[j] = str[i];
		if (dest[j] == '\0') /* 追加2行 */
		    break;
		j++;
	    }
	    i++;
	} else {
	    if (!(str[i] == " "[0] && str[i+1] == " "[1])) {
		dest[j] = str[i];
		dest[j+1] = str[i+1];
		j += 2;
	    }
	    i += 2;
	}
    }


No.10281

Re:空白を取り除く方法
投稿者---とまと(2003/11/04 09:03:04)


モラウ2さん、ceybordさん、すがりんさん。
返信ありがとうございます。
問題なく、出来ました。
有難うございます。