C言語で書いてみました

過去の情報処理技術者試験の出題をもとにして、Cのソースを起こしてみました。

■ URLエンコード(平成16年秋期午後問6)

#include <stdio.h>

/* 基本情報 平成16年秋期午後問6 */
/* URL エンコードプログラム */
int replaceChar(unsigned char c)
{
    if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') ||
        (c >= 'a' && c <= 'z') || c == '@' || c == '*' ||
        c == '-' || c == '.' || c == '_') return 0;
    return 1;
}

void URLEncode(unsigned char *input, unsigned char *output)
{
    const unsigned char chars[] = "0123456789ABCDEF";
    while (*input != '\0') {
        if (replaceChar(*input)) {
            *output++ = '%';
            *output++ = chars[*input >> 4]; 
            *output++ = chars[*input & 0x0F];
        } else {
            *output++ = *input;
        }
        input++;
    }
    *output = '\0'; 
}

/* テスト */
int main()
{
    char s[101], d[301];
    printf("入力文字列:");
    gets(s);
    URLEncode(s, d);
    printf("出力文字列:%s\n", d);
    return 0;
}