我得到了一个填字游戏crossword20,它已经满了单词,所以我不需要生成。我需要扫描单词水平只,并把他们放在一个新的数组。每一行一个字,所以新的数组将是array40。
注意:纵横字谜最多有40个水平单词!,所以我只需要数组中的40行。如果words<40,则数组中的其他单元将保持“\0”。
黑匣子是“*”。
给出的填字游戏如下:
char crossword[20][20]={
{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
{'*','T','Y','P','E','*','*','*','*','G','U','I','T','A','R','I','S','T','*','*'},
{'*','E','*','*','V','A','I','N','*','A','*','*','*','V','*','*','T','*','I','*'},
{'*','R','O','M','E','*','*','*','*','M','A','R','R','I','A','G','E','*','N','*'},
{'*','R','*','*','N','O','O','D','L','E','*','O','*','A','*','*','A','N','T','*'},
{'*','I','N','*','*','*','*','O','*','*','*','P','E','T','R','O','L','*','I','*'},
{'*','F','*','C','*','C','U','T','*','L','I','E','*','I','*','A','T','O','M','*'},
{'*','I','*','O','*','U','*','*','M','*','N','*','M','O','U','T','H','*','A','*'},
{'*','E','N','V','E','L','O','P','E','*','F','*','I','N','*','H','*','A','T','*'},
{'*','D','*','E','*','T','*','*','A','*','E','*','N','*','*','*','A','G','E','*'},
{'*','*','A','R','T','*','I','N','T','E','R','I','O','R','*','A','*','O','*','*'},
{'*','K','*','*','O','*','R','*','*','A','T','*','R','O','B','B','E','R','Y','*'},
{'*','A','T','*','A','I','R','*','S','T','I','R','*','O','*','O','*','A','*','*'},
{'*','N','O','*','S','*','I','T','*','*','L','*','S','M','I','L','E','*','S','*'},
{'*','G','*','*','T','*','T','*','O','*','I','*','O','*','N','I','G','H','T','*'},
{'*','A','C','E','*','M','A','N','D','A','T','O','R','Y','*','T','O','*','O','*'},
{'*','R','*','N','Y','*','T','*','E','*','Y','*','T','*','*','I','*','*','P','*'},
{'*','O','*','D','O','*','E','*','*','*','*','I','*','O','Z','O','N','E','*','*'},
{'*','O','N','*','U','N','D','E','R','W','A','T','E','R','*','N','O','U','N','*'},
{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}
};到目前为止,我所做的是这样的,但这是不正确的,因为我是用书呆子的方式来做的……:
#include<stdio.h>
#include<stdlib.h>
char cross[20][20]={
{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
{'*','T','Y','P','E','*','*','*','*','G','U','I','T','A','R','I','S','T','*','*'},
{'*','E','*','*','V','A','I','N','*','A','*','*','*','V','*','*','T','*','I','*'},
{'*','R','O','M','E','*','*','*','*','M','A','R','R','I','A','G','E','*','N','*'},
{'*','R','*','*','N','O','O','D','L','E','*','O','*','A','*','*','A','N','T','*'},
{'*','I','N','*','*','*','*','O','*','*','*','P','E','T','R','O','L','*','I','*'},
{'*','F','*','C','*','C','U','T','*','L','I','E','*','I','*','A','T','O','M','*'},
{'*','I','*','O','*','U','*','*','M','*','N','*','M','O','U','T','H','*','A','*'},
{'*','E','N','V','E','L','O','P','E','*','F','*','I','N','*','H','*','A','T','*'},
{'*','D','*','E','*','T','*','*','A','*','E','*','N','*','*','*','A','G','E','*'},
{'*','*','A','R','T','*','I','N','T','E','R','I','O','R','*','A','*','O','*','*'},
{'*','K','*','*','O','*','R','*','*','A','T','*','R','O','B','B','E','R','Y','*'},
{'*','A','T','*','A','I','R','*','S','T','I','R','*','O','*','O','*','A','*','*'},
{'*','N','O','*','S','*','I','T','*','*','L','*','S','M','I','L','E','*','S','*'},
{'*','G','*','*','T','*','T','*','O','*','I','*','O','*','N','I','G','H','T','*'},
{'*','A','C','E','*','M','A','N','D','A','T','O','R','Y','*','T','O','*','O','*'},
{'*','R','*','N','Y','*','T','*','E','*','Y','*','T','*','*','I','*','*','P','*'},
{'*','O','*','D','O','*','E','*','*','*','*','I','*','O','Z','O','N','E','*','*'},
{'*','O','N','*','U','N','D','E','R','W','A','T','E','R','*','N','O','U','N','*'},
{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}
};
int main(){
int i, j, start_index, end_index, a, b, start_index1, end_index1;
char cross1[40][20], cross11[40][20];
for(i=0;i<40;i++){
for(j=0;j<20;j++){
cross1[i][j]='\0';
}
}
for(i=0;i<40;i++){
for(j=0;j<20;j++){
cross11[i][j]='\0';
}
}
for(i=0;i<19;i++){
start_index = -1;
end_index=-1;
start_index1 = -1;
end_index1=-1;
for(j=0;j<20;j++){
if(isalpha(cross[i][j]) && (!isalpha(cross[i][j-1])) && isalpha(cross[i][j+1]) && start_index==-1){
start_index = j;
}
if(isalpha(cross[i][j]) && (!isalpha(cross[i][j+1])) && isalpha(cross[i][j-1]) && end_index==-1){
end_index = j;
}
if(isalpha(cross[i][j]) && (!isalpha(cross[i][j-1])) && isalpha(cross[i][j+1])){
start_index1 = j;
}
if(isalpha(cross[i][j]) && (!isalpha(cross[i][j+1])) && isalpha(cross[i][j-1])){
end_index1 = j;
}
}
for(a=start_index,b=0;a<=end_index;a++,b++){
cross1[i][b]=cross[i][a];
}
for(a=start_index1,b=0;a<=end_index1;a++,b++){
cross11[i][b]=cross[i][a];
}
}
printf("CROSS1\n");
for(i=0;i<20;i++){
for(j=0;j<20;j++){
printf("%c ", cross1[i][j]);
}
printf("\n");
}
printf("CROSS11\n");
for(i=0;i<20;i++){
for(j=0;j<20;j++){
printf("%c ", cross11[i][j]);
}
printf("\n");
}
return 0;
}输出如下:
CROSS1
TYPE
VAIN
ROME
NOODLE
IN
CUT
MOUTH
ENVELOPE
AGE
ART
AT
AT
NO
NIGHT
ACE
NY
DO
ON
CROSS11
GUITARIST
VAIN
MARRIAGE
ANT
PETROL
ATOM
MOUTH
AT
AGE
INTERIOR
ROBBERY
STIR
SMILE
NIGHT
TO
NY
OZONE
NOUN问题是我希望它在一个数组中而不是在两个( cross1,cross11)中,还有一些单词被打印了两次(在cross1和cross11中都像“口”一样),还有一个问题是有些词甚至不像“谎言”那样打印。
任何帮助都会得到赏识和回报!
发布于 2014-12-02 15:46:24
您的问题是,您的代码只能在每行最多有两个单词的情况下工作。看看你的原始数组:在cross[6]上,你有切割,谎言和原子。您在cross1中添加了一个切分,然后在cross11中放置了LIE,你遇到了原子,并且在cross11中覆盖了一个谎言,所以LIE永远不会被存储。
一个好的解决方案是摆脱start_index、end_index和cross11,因为start_index1和end_index1做他们应该做的事情。您还需要一个类型为row的变量int来跟踪您在cross1中的位置,以确保不再覆盖内容。一旦您为end_index1设置了不同的值,就把它放在cross1中,如下所示:
if(isalpha(cross[i][j]) && (!isalpha(cross[i][j+1])) && isalpha(cross[i][j-1])){
end_index1 = j;
//now do this right here, not outside the j-loop
for(a=start_index1,b=0;a<=end_index1;a++,b++){
cross1[row][b]=cross[i][a];
}
row++; //variable which will keep track of the row you're in for cross1
}https://stackoverflow.com/questions/27252954
复制相似问题