C语言问题 题目12 拼字游戏 问题描述 拼字游戏历史悠久,能锻炼人的思维和提高
单词记忆量。在欧美报纸的版面中经常会见到。本题只是简单地演示单组交叉词。所谓单组交叉词,是指两个单词交叉放置,一个
水平放置,另一个垂直放置,
交叉点是两个单词都共用一个字母,而且交叉点遵循交叉靠前原则,即这公用的字母尽量在水平单词的前方,然后也尽量在垂直单词的上方。例如:DEFER,PREFECT(前一个为水平单词)的交叉点是E,而PREFECT,EDFER的交叉点是R。双交叉词是指有两组单组交叉词,它们的水平单词放在同一行。试编程将输入的每四个一组的单词尽可能组成双交叉词。 输入:输入文件由若干行组成,每行有四个单词,按顺序每两个为一组,每组第一个单词为水平单词,每个单词由1到10个大写字母组成,单词之间用一个空格隔开。最后一行由一个"#"结束。 输出:输出文件由一系列双交叉词组成,每个水平单词之间隔三个空格。若不能构成双交叉词,则显示"Unable to make two crosses"。每组双交叉词间空一行。 输入样例: AT PART RIGHT BUT PEANUT BANANA VACUUM GREEDY # 输出样例: B PU AT RIGHT R T Unable to make two crosses 开发环境 采用C或C++实现,VC++6.0、Windows98/XP 基本要求 实现拼字游戏的程序,完成基本功能要求。 设计要求 要求有合理的算法设计,容错处理,可参考游戏经历增加相关功能。 拓展功能要求
宏定义字符串拼接可以使用宏运算##,即 #define strcat(x,y) x##y。
##运算符可以将两个记号(例如标识符)“粘”在一起,成为一个记号。如果其中一个操作数是宏参数,“粘合”会在当形式参数被相应的实际参数替换后发生。考虑下面的宏:
#define MK_ID(n) i##n
下面的声明使用MK_ID创建了3个标识符:
int MK_ID(1), MK_ID(2), MK_ID(3)
预处理后声明变为:
int i1, i2, i3
例如:
#include <stdio.h>
#define strcat(x,y) x##y
int main()
{
int strcat(i,1),strcat(i,2)
i1=10,i2=20
printf("%d %d",i1,i2)
return 0
}
/*运行结果:
10 20
*/
输入QAUI。
1、C语言中Q包含金字旁。
2、C语言中A包含草字头。
3、C语言中U包含门字。
4、C语言中I包含东字。
5、和五笔输入法原理一样,拼字后可输入“_”。