Keitai Message

最初に,文字の表を準備しちゃいました.

#include <stdio.h>
#include <string.h>

int main(void)
{
	//	ファイル出力準備
    FILE *pfO;	//	出力ファイルポインタ
    pfO = fopen("a.out","w");
    if(pfO==NULL)
	{
        printf("ファイルが開けません\n");
        return -1;
    }
	//	テーブル
	char t1[] = ".,!? ";
	char t2[] = "abc";
	char t3[] = "def";
	char t4[] = "ghi";
	char t5[] = "jkl";
	char t6[] = "mno";
	char t7[] = "pqrs";
	char t8[] = "tuv";
	char t9[] = "wxyz";

	//
	//	入力
	//
	int n;				//	テストケースの数

	scanf("%d", &n);

	for(int i = 0; i < n; i++)
	{
		char *s = new char [1024];	//	テストケース
		int sl;									//	文字列の長さ
		scanf("%s", s);
		sl = strlen(s);

		char preC = s[0];	//	1つ前の文字
		char k=0;			//	同じ文字が連続している回数
		for(int j = 1; j < sl; j++)
		{
			if(s[j] != '0')
			{
				k++;
			}
			else
			{
				switch(s[j-1])
				{
				case '1':
					fputc(t1[k%5], pfO);
					break;
				case '2':
					fputc(t2[k%3], pfO);
					break;
				case '3':
					fputc(t3[k%3], pfO);
					break;
				case '4':
					fputc(t4[k%3], pfO);
					break;
				case '5':
					fputc(t5[k%3], pfO);
					break;
				case '6':
					fputc(t6[k%3], pfO);
					break;
				case '7':
					fputc(t7[k%4], pfO);
					break;
				case '8':
					fputc(t8[k%3], pfO);
					break;
				case '9':
					fputc(t9[k%4], pfO);
					break;
				}
				k = -1;
			}
		}
		fputc('\n', pfO);

		delete [] s;
	}

    //ファイルポインタを閉じる
    fclose(pfO);

    return 0;
}