//poj 2996
+---+---+---+---+---+---+---+---+
| .r.|:::|.b.|:q:|.k.|:::|.n.|:r:|
+---+---+---+---+---+---+---+---+
|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|
+---+---+---+---+---+---+---+---+
|...|:::|.n.|:::|...|:::|...|:p:|
+---+---+---+---+---+---+---+---+
|:::|...|:::|...|:::|...|:::|...|
+---+---+---+---+---+---+---+---+
|...|:::|...|:::|.P.|:::|...|:::|
+---+---+---+---+---+---+---+---+
|:P:|...|:::|...|:::|...|:::|...|
+---+---+---+---+---+---+---+---+
|.P.|:::|.P.|:P:|...|:P:|.P.|:P:|
+---+---+---+---+---+---+---+---+
|:R:|.N.|:B:|.Q.|:K:|.B.|:::|.R.|
+---+---+---+---+---+---+---+---+
注意输入处理:
#include<stdio.h>
#define WHITE 1
#define BLACK 0
const int MAX = 10 ;
char map[MAX][MAX] ;
char dic[] = "KQRBNP"; //输出棋子类型的顺序
void print(int mod ,char c ,int &first) //输出棋子类c的所有棋子位置。mod:黑方还是白方
{
char tmp = c ;
if(mod==BLACK)
c += 32 ;
if(mod == BLACK)
{
for(int i = 1; i<=8 ; i++) //对于序号大小的处理
{
for(int j = 1; j <=8 ; j++)
{
if(map[i][j]==c)
{
if(first)
first = 0 ;
else
printf(",") ;
if(c!='P' && c!= 'p')
printf("%c",tmp) ;
printf("%c%d" , 'a'+j-1 ,9-i) ;
}
}
}
}
else
{
for(int i = 8; i>=1 ; i--)
{
for(int j = 1; j <=8 ; j++)
{
if(map[i][j]==c)
{
if(first)
first = 0 ;
else
printf(",") ;
if(c!='P' && c!= 'p')
printf("%c",tmp) ;
printf("%c%d" , 'a'+j-1 ,9-i) ;
}
}
}
}
}
void get_bord() //读取无用的边缘字符
{
scanf("+---+---+---+---+---+---+---+---+") ;
getchar() ; //消除换行符。
}
char get_elem() //一格一格读取数据块,并把棋格中的内容取出。
{
char a ,b, c ;
scanf("|%c%c%c" ,&a ,&b ,&c) ;
return b ;
}
void result(int mod) //输出最终结果。
{
if(mod==WHITE)
printf("White: ") ;
else
printf("Black: ") ;
int first = 1 ;
for(int i = 0; i<6 ; i++)
{
print(mod , dic[i] , first) ;
}
printf("\n") ;
}
int main()
{
for(int i = 1 ; i <= 8 ; i++)
{
get_bord() ;
for(int j = 1; j <= 8 ; j++)
{
map[i][j] = get_elem() ;
}
getchar() ;
getchar() ;
}
get_bord() ;
result(WHITE) ;
result(BLACK) ;
}
字符串输入处理
最新推荐文章于 2022-01-24 22:53:01 发布