AOJ_2006 Keitai Message

問題

解法
携帯電話のボタンごとの文字の割り当てを配列にしておくとやりやすい。

実装

#include <cstdio>
#include <cstring>
using namespace std;

char c[10][6] = {
	"",
	".,!? ",
	"abc",
	"def",
	"ghi",
	"jkl",
	"mno",
	"pqrs",
	"tuv",
	"wxyz",
};
int buf[1024];

void mes(int len){
	char message[77];
	int m_len = 0;
	for(int i = 0; i < len; i++){
		if(buf[i] == 0) continue;
		int j = 0;
		for(; buf[i + j] != 0; j++){ ; }
		int mod = strlen(&c[buf[i]][0]);
		message[m_len] = c[buf[i]][(j-1) % mod];
		m_len++;
		i += j;
	}
	message[m_len] = 0;
	printf("%s\n", message);
}
int main(){
	int n;
	char t;
	scanf("%d", &n);
	scanf("%c", &t);
	for(int i = 0; i < n; i++){
		int j = 0;
		while(scanf("%c", &t) && '0' <= t && t <= '9'){
			buf[j] = t - '0';
			j++;
		}
		mes(j);
	}
	return 0;
}