USACO 1.3.3_namenum
阿新 • • 發佈:2018-12-12
/*
ID: cjn77881
LANG: C++
TASK: namenum
*/
#include <stdio.h>
#include <string.h>
char map[100],word[20],number[20],*cn,*cw;
int numlen,nans;
int main(){
FILE *fin = fopen("namenum.in","r");
FILE *fout = fopen("namenum.out","w");
FILE *dic = fopen("dict.txt","r");
map['A'] = map['B'] = map['C'] = '2'; //以字元為下標是可行的,自動轉為對應數字,例如'A' ==65
map['D'] = map['E'] = map['F'] = '3';
map['G'] = map['H'] = map['I'] = '4';
map['J'] = map['K'] = map['L'] = '5';
map['M'] = map['N'] = map['O'] = '6';
map['P'] = map['R'] = map['S'] = '7';
map['T'] = map['U'] = map['V'] = '8';
map['W'] = map[ 'X'] = map['Y'] = '9';
fscanf(fin,"%s",number);
numlen = strlen(number);
while (fscanf(dic,"%s",word) != EOF){ //判斷檔案是否讀到末尾的方法,fscanf函式的返回值若為EOF則已讀取至檔案末尾
if (strlen(word) == numlen){ //先判斷兩串長度是否一致
for (cw = word, cn = number;*cw && *cn;cw++,cn++) if (map[*cw] != *cn) break;
//cw為word字元陣列第一個元素的地址,*cw的值為0時,說明已經讀完字元陣列;cw++即指標所指地址後移一位,讀取字元陣列下一元素。
if (*cw =='\0' && *cn == '\0') { //兩者都讀完了字元陣列,說明串匹配成功
nans++;
fprintf(fout,"%s\n",word);
//printf("%s",word);
}
}
}
if (nans == 0) fprintf(fout,"%s\n","NONE"); //"%s\n"這種寫法是可以使用的
return 0;
}