[1] 授業単元: 暇を持て余す
[2] 問題文(含コード&リンク): 暇なので、ソース中のタブなどのインデントを2ch用のインデント? に変換するプログラムの作成。
例えば、以下のような感じのもの( は全角ではなく、半角のものとする)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
    FILE *fp_in, *fp_out;
    int ch;
    char filename[128] = {0}, *p;
    if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
    if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
    if((p = strrchr(argv[1], '.')) == NULL) exit(3);
    memcpy(filename, argv[1], p - argv[1]);
    strcat(filename, ".txt");
    if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);
    while((ch = fgetc(fp_in)) != EOF){
        if(ch == '\t') fprintf(fp_out, "&nbsp; &nbsp; ");
        else fputc(ch, fp_out);
    }
    fclose(fp_in);
    fclose(fp_out);
    return 0;
}
しかし、これではtabを変換しているだけで、spaceが連続した場合などには対応していない。
そこで、spaceが連続した場合や、tabとspaceが並んだ場合にも対応できるようにすること。
[3] 環境
 [3.1] OS: Windows Xp、またはフリーのLinux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C、C++のどちらでもおk
[4] 期限: なし
[5] その他の制限: なし