[PR]

タブ文字 '\t' を展開する

戻る

 タブを展開する関数を作る。

//*********************************************************
// 文字列 String の文字 '\t' をタブサイズ nTab で展開する。
// 改行文字が '\n' であることを前提としている。
// 置換後の文字列 String のサイズが String の記憶領域を超える場合の動作は未定義。
//*********************************************************
char *ExpandTab( char *String, int nTab )
{
	int   nSpace; // 展開するスペースの数
	char *start;  // 行の先頭を指す

	start = String;
	for( int i = 0; start[i] != '\0'; i++ )
	{
		// 行の先頭の情報を更新
		if ( start[i] == '\n' )
		{
			start = (start+i) + 1;
			i = 0;
		}

		if ( start[i] == '\t' )
		{
			// タブの展開に必要なスペースの数を求める
			nSpace = nTab - ( i % nTab );

			// '\t' を nSpace 個の ' ' で置換する。
			StrShift( (start+i)+1, nSpace-1 );
			memset( start+i, ' ', nSpace );
		}
	}

	return String;
}//ExpandTab

使用例

// この例では、配列 String のサイズは 93 以上でなければならない。
int main( void )
{
	char String[93] = "\t1\t12\t123\t1234\t0\n\t12345\t123456\t1234567\t12345678\t0\n";

	printf( "展開前:size=%d\n%s\n", strlen(String)+1, String );
	ExpandTab( String, 8 );
	printf( "展開後:size=%d\n%s\n", strlen(String)+1, String );

	return 0;
}//main

実行結果

展開前:size=51
        1       12      123     1234    0
        12345   123456  1234567 12345678        0

展開後:size=93
        1       12      123     1234    0
        12345   123456  1234567 12345678        0


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
『新妻LOVELY×CATION』を応援しています!