1. 程式人生 > >USACO 1.3.3_namenum

USACO 1.3.3_namenum

/*
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; }