思路:先把棋盘准备好,再往里填棋子((行号+列号)%2 == 0放的是…,否则放的是:::),这就是棋盘准备的过程
出自博主:https://www.cnblogs.com/mobileliker/p/4076264.html
AC代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string sout[8 + 9]; //总共的行数是8+9行
//赋值处最初始化的棋盘
sout[0] = "+---+---+---+---+---+---+---+---+";
for(int i = 0; i < 8; i++)
{
int res = i * 2 + 1;
sout[res] = "|";
for(int j = 0; j < 8; j++)
{
if((i+j)%2==0) sout[res] += "...";
else sout[res] += ":::";
sout[res] += "|";
}
sout[(i+1)*2] = "+---+---+---+---+---+---+---+---+";
}
string s;
//white
cin >> s;//输入的下是white: (只能接收到空格处)
cin >> s;//输入的是空格后面的数据
s = "," + s;//这样方便处理,都是 ,+数据
char color[] = {'K','Q','R','B','N'};
int k;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == ',')
{
//遍历那五个符号
for(k = 0; k < 5; k++)
{
if(color[k] == s[i + 1]) break;
}
if(k < 5) //没有符号‘p’的话
{
//对于棋盘而言放棋子的地方行和列的计算公式
sout[(8-(s[i + 3] - '0')) * 2 + 1][2 + 4 * (s[i + 2] - 'a')] = color[k];
} else {
sout[(8-(s[i + 2] - '0')) * 2 + 1][2 + 4 * (s[i + 1] - 'a')] = 'P';
}
}
}
//black
cin >> s;
cin >> s;
s = "," + s;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == ',')
{
for(k = 0; k < 5; k++)
{
if(color[k] == s[i + 1]) break;
}
if(k < 5)
{
sout[(8-(s[i + 3] - '0')) * 2 + 1][2 + 4 * (s[i + 2] - 'a')] = color[k] + 32;
}else{
sout[(8-(s[i + 2] - '0')) * 2 + 1][2 + 4 * (s[i + 1] - 'a')] = 'p';
}
}
}
for(int i = 0; i < 17; i++) cout << sout[i] << endl;
return 0;
}