※「セキュリティ保護のため...」というメッセージが出る方・日本語が入力できない方へ
↑ 空白その他除去


余分な空白その他を削除するもの。

void CharPress(char* str);          //文字列の圧縮
int cutcrspace(char* str);          //後ろの空白・改行文字削除
int cutcrspaceJ(char* str);         //その日本語版
int cutprespaceJ(char* str);        //先頭の空白除去(日本語空白対応)
int cutmemoetc(char* str);          //後ろのコメント削除
void cutnonnum(char* str);          //数字以外をカット
int PressMultiSpace(char* str);     //連続した空白を1個にする

void CharPress(CString& str);       //以下MFC版
CString& cutnonnum(CString& str);
CString& cutcrspace(CString &str);
CString& cutcrspaceJ(CString &str);
int cutprespaceJ(CString& str);
int PressMultiSpace(CString& str);

// 文字をできるだけ圧縮する
void CharPress(char* str)
{
	static char tb1[]=
		" 、。,.・:;?!゛゜\'` ^ _        o---/   |  \'\'\"\"()[][]{"
		"}<>  「」    +- x  = <>      ゜\'\" \\$  %#&*@        ";	static char tb2[]=
	    "ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガキ ギク グ"
		"ケ ゲコ ゴサ ザシ ジス ズセ ゼソ ゾタ ダ"
		"チ ヂッ ツ ヅテ デト ドナ ニ ヌ ネ ノ ハ バ"
		"パヒ ビピフ ブプヘ ベペホ ボポマ ミ   "
		"ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ワ ワ "
		"ヰヱヲ ン ヴカ ケ ";

	int i,j,k,m;
	int slen = strlen(str);
	//特殊文字,カタカナ,アルファベット,数字の圧縮
	for (i=j=0; i<slen; )
	{
		k = str[i];   if (k<0) k+=256;
		m = str[i+1]; if (m<0) m+=256;
		if (k==129)
		{
			if (m<64 || m>151)
			{
				str[j++]=str[i++];
				str[j++]=str[i++];
				continue;
			}
			if (m==64)  //漢字の空白
			{
				i+=2;
				continue;
			}
			if (tb1[m-64]==32) //圧縮不能
			{
				str[j++]=str[i++];
				str[j++]=str[i++];
				continue;
			}
			str[j++] = tb1[m-64];
			i+=2;
			continue;
		}
		if (k==130)
		{
			if (79<=m && m<=88)  //数字
			{
				str[j++] = m-31;
				i+=2;
				continue;
			}
			if (96<=m && m<=121) //アルファベット大
			{
				str[j++] = m-31;
				i+=2;
				continue;
			}
			if (129<=m && m<=154) //アルファベット大
			{
				str[j++] = m-32;
				i+=2;
				continue;
			}
		}
		if (k==131 && 64<=m && m<=150) //カタカナ
		{
			memcpy(str+j, tb2+(m-64)*2, 2);
			if (str[j+1]==32)
				j++;
			else
				j+=2;
			i+=2;
			continue;
		}
		if ((129<=k && k<=159) || (224<=k && k<=254))
		{
			str[j++]=str[i++];
			str[j++]=str[i++];
			continue;
		}
		if (k==32)
		    i++;
		else
			str[j++]=str[i++];
	}
	str[j]=0;

}

/********************************************************************
 * 右の空白と改行を除去する
 *******************************************************************/
int cutcrspace(char* str)
{
    int  k;
    k=strlen(str)-1;
    while(k>=0 && (str[k]==' ' || str[k]==0x0d || str[k]==0x0a))
        str[k--]=0;
	return(k);
}
/********************************************************************
 * 右の空白(含む漢字)と改行を除去する
 *******************************************************************/
int cutcrspaceJ(char* str)
{
    int  i,k,m;
    unsigned char c;

    m=0;
    for(i=0,k=-1; c=str[i]; i++)
       {
        if (c==0x20 || c==0x09)
            continue;
        if (c==0x0d || c==0x0a)
           {
            m=1;
            continue;
           }
        if (c < 0x080 || (c>=0x0a0 && c<=0x0df))
           {
            k=i;
            continue;
           }
        else
           {
            i++;
            if (c==0x081 && str[i]==0x040)
                continue;
            k=i;
            continue;
           }
       }
    str[k+1]=0;

    return(m);
}

/********************************************************************
   左の空白(含む漢字)を除去する
 *******************************************************************/
int cutprespaceJ(char* str)
{
	int i,k,len,c1;
	k = len = strlen(str);
	for (i=0; i<len; i++)
	{
		c1=str[i]; if (c1<0) c1+=256;
		if (c1==32)
			continue;
		if (c1==129 && str[i+1]==64)
		{
			i++;
			continue;
		}
		k=i;
		break;
	}
	if (0<k && k<len)
		memmove(str, str+k, len-k);

	str[len-k]=0;
	return len-k;
}
/********************************************************************
   右のコメントその他を除去する
 *******************************************************************/
int cutmemoetc(char* str)
{
	int i,k,len,c1;
	
	len = strlen(str);
	for (i=k=0; i<len; i++)
	{
		c1=str[i]; if (c1<0) c1+=256;
		if (c1==13 || c1==10)
			break;
		if (c1=='/' && str[i+1]=='/')
			break;
		if (c1==32)
			continue;
		if (c1==129 && str[i+1]==64)
		{
			i++;
			continue;
		}
		if ((129<=c1 && c1<=159)||(224<=c1))
			i++;

		k=i+1;
	}
	str[k]=0;

	return(k);
}
/********************************************************************
   数字以外を削除する
 *******************************************************************/
void cutnonnum(char* str)
{
	int i,j;
	for (i=j=0; str[i]; i++)
	{
		if (48<=str[i] && str[i]<=57)
			str[j++]=str[i];
	}
	str[j]=0;
	return;
}
/********************************************************************
  連続した空白を1個の空白に置換する
 *******************************************************************/
int PressMultiSpace(char* str)
{
	int i,j,m,len,c1;
	len = strlen(str);
	for (i=j=m=0; i<len; i++)
	{
		c1=str[i]; if (c1<0) c1+=256;
		if (c1==32)
		{
			if (m)
				continue;
			str[j++]=str[i];
			m=1;
			continue;
		}
		if (c1==129 && str[i+1]==64)
		{
			if (m)
			{
				i++;
				continue;
			}
			str[j++]=str[i++];
			str[j++]=str[i];
			m=1;
			continue;
		}
		if ((129<=c1 && c1<=159) || (224<=c1))
		{
			str[j++]=str[i++];
			str[j++]=str[i];
			m=0;
		}
		else
		{
			str[j++]=str[i];
			m=0;
		}
	}
	str[j]=0;
	return j;

}


void CharPress(CString& str) { int len = str.GetLength(); char* buf = str.GetBuffer(len+3); buf[len]=0; CharPress(buf); str.ReleaseBuffer(); } CString& cutcrspace(CString &str) { int len = str.GetLength(); char* buf = str.GetBuffer(len+3); buf[len]=0; cutcrspace(buf); str.ReleaseBuffer(); return str; } CString& cutcrspaceJ(CString &str) { int len = str.GetLength(); char* buf = str.GetBuffer(len+3); buf[len]=0; cutcrspaceJ(buf); str.ReleaseBuffer(); return str; } int cutprespaceJ(CString& str) { int len = str.GetLength(); char* buf = str.GetBuffer(len+3); buf[len]=0; cutprespaceJ(buf); str.ReleaseBuffer(); return str.GetLength(); } CString& cutnonnum(CString& str) { int len = str.GetLength(); char* buf = str.GetBuffer(len+3); buf[len]=0; cutnonnum(buf); str.ReleaseBuffer(); return str; } /******************************************************************** 連続した空白を1個の空白に置換する *******************************************************************/ int PressMultiSpace(CString& str) { int len = str.GetLength(); char* buf = str.GetBuffer(len+1); buf[len]=0; len = PressMultiSpace(buf); str.ReleaseBuffer(); return len; }

↑
(C)copyright ffortune.net 1995-2007 produced by ffortune and Lumi.
お問い合わせはこちらから