#2
by かずま » 7年前
連続する 0 で最左最長のものを :: に置き換える、
ということでしょうか。
コード:
#include <stdio.h>
void print(const int *x)
{
int i, j = -1, k = 0, m = 0, n, c = 0;
for (i = 0; i < 8; i++)
if (x[i]) k = 0;
else if (++k > m) m = k, j = i;
n = j - m;
for (i = 0; i <= n; i++) c = printf(c ? ":%x" : "%x", x[i]);
if (m > 1) printf("::"), c = 0;
while (++j < 8) c = printf(c ? ":%x" : "%x", x[j]);
putchar('\n');
}
int main(void)
{
char s[100]; int x[8];
while (printf(">> "), scanf("%99s", s) == 1) {
//puts(s);
if (sscanf(s, "%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x",
x, x+1, x+2, x+3, x+4, x+5, x+6, x+7) == 8) print(x);
else puts("error");
}
return 0;
}
面白い問題です。質問の仕方がちゃんと
していれば、すぐに回答したんですがねえ。
連続する 0 で最左最長のものを :: に置き換える、
ということでしょうか。
[code=c]
#include <stdio.h>
void print(const int *x)
{
int i, j = -1, k = 0, m = 0, n, c = 0;
for (i = 0; i < 8; i++)
if (x[i]) k = 0;
else if (++k > m) m = k, j = i;
n = j - m;
for (i = 0; i <= n; i++) c = printf(c ? ":%x" : "%x", x[i]);
if (m > 1) printf("::"), c = 0;
while (++j < 8) c = printf(c ? ":%x" : "%x", x[j]);
putchar('\n');
}
int main(void)
{
char s[100]; int x[8];
while (printf(">> "), scanf("%99s", s) == 1) {
//puts(s);
if (sscanf(s, "%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x",
x, x+1, x+2, x+3, x+4, x+5, x+6, x+7) == 8) print(x);
else puts("error");
}
return 0;
}
[/code]
面白い問題です。質問の仕方がちゃんと
していれば、すぐに回答したんですがねえ。