タブを展開する関数を作る。 //********************************************************* // 文字列 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 |
|