//问题分析: // 此问题很简单,将密码消息中的每个字母分别进行相应的变换即可。关键是输入数据中的消息行、读入消息行的数据。每个消息行包括多个单词,以及若干个标点符号。 // a.scanf函数输入字符串时,每个字符串中不能有空格。每读到单词“START”,则表示下面读到的是一个消息行中的单词,直到读到单词“END”为止。gets函数则一次可 // 读入一整行。 // b.对消息解密时,需要将表示消息中单词的字符串作为普通的数组,依次变换其中的每个字母。 #include <stdio.h> #include <string.h> #include <ctype.h> #include <iostream> using namespace std; char str1[6] = "START"; char str2[4] = "END"; char str3[11] = "ENDOFINPUT"; char original[27] = "VWXYZABCDEFGHIJKLMNOPQRSTU"; char code[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int main() { char instr[210]; while (gets(instr)){ if (strcmp(instr, str3) == 0) break; else if (strcmp(instr,str1) == 0 || strcmp(instr, str2) == 0) continue; else{ int len = strlen(instr); for (int i = 0; i < len; i++){ if (isalpha(instr[i])){ for (int j = 0; j < 26; j++){ if (instr[i] == code[j]){ cout << original[j]; } } } else cout << instr[i]; } } cout << endl; } return 0; }