//#ifndef coutAIO_H
#include <iostream>//数据类型前面加mutable可以避免常函数中。
#include <windows.h>//Ctrl+K+C一键注释,Ctrl+K+U一键去释 /* ——— —— —— —— —— —— */
#include <conio.h>
#include <stack>
#include <algorithm>
#include <cmath>
#include <vector>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <graphics.h>
#define MAX 1000//最大
using namespace std;
long long sz[10000][10000];//数组,用于分解整数
long long jc(long long a) {//阶乘(!a)
long long k = 1;
for (long long i = 0; i < a; i++)
{
k *= i;
}
return 1;
}
long long zsws(long long a) {//求整数位数
short b = 0;
while (a) {
a /= 10;
b++;
}
return b;
}
void fj(long long a) {//分解整数各位
long long b = zsws(a), i;
while (b--) {
sz[0][b] = a % 10;
a /= 10;
}
}
void xycfb(long long x = 9, long long y = 9) {//把xy乘法表存在sz里。
for (long long i = 0; i < x; i++) {
for (long long j = 0; j < y; j++) {
sz[i][j] = (i + 1) * (j + 1);
}
}
}
void scsz(long long x = 9, long long y = 9) {//输出数组
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
cout << sz[i][j] << "\t";
}
cout << endl;
}
}
void sccfb(long long a = 9, long long b = 9) {//输出ab乘法表
xycfb(a, b);
scsz(a, b);
}
long long fbnq(long long a) {//斐波那契数列求和
if (a > 2)
return fbnq(a - 1) + fbnq(a - 2);
return 1;
}
void printsz(char* arr[]) {//打印数组
long long i = 0;
for (; *arr != NULL; arr++) {
cout << i << " " << *arr << endl;//第几个被输出与
i++;
}
}
//以上新添
void gotoxy(int y, int x)
{
COORD coord;
coord.X = x;
coord.Y = y;
HANDLE a = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a, coord);
}
bool isprime(long long a) {
long long l = 0;
if (a == 2) {
return true;
}
else if (a % 2 == 0) {
return false;
}
else {
for (size_t m = 3; m < a; m += 2)
{
if (a % m == 0) {
return false;
}
}
return a;
}
}
void color(int a)//打印颜色
{
/*亮白*/ if (a == 0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
/*蓝色*/ if (a == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
/*绿色*/ if (a == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
/*紫色*/ if (a == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
/*红色*/ if (a == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
/*黄色*/ if (a == 5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
/*深蓝色*/ if (a == 6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
/*土黄色or金黄色*/ if (a == 7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN);
/*灰色接近白*/ if (a == 8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void bukaqingping() {
gotoxy(0, 0);/*
for (int i = 0; i < 50; i++) {
cout << " " << endl;
}*/
system("cls");
gotoxy(0, 0);
}
template<typename T>
void swap(T & a, T & b) {
T temp = a;
a = b;
b = temp;
}
long long numberaio(string n) {
for (int i = 0; i < 100000; i++) {
if (n[i] == '\0')
{
return i;
}
}
}
void coutAIO(string b, int truefalse0 = 0, bool truefalse1 = 0) {//说的话,速度,是否回车。
int i = 0, s = 0;
long long a = numberaio(b);
while (a != 0) {
color(2);
/*
s = rand() % 9;
if (a != 0 && s == 0)
{
color(0);
}
if (a != 0 && s == 1)
{
color(1);
}
if (a != 0 && s == 2)
{
color(2);
}
if (a != 0 && s == 3)
{
color(3);
}
if (a != 0 && s == 4)
{
color(4);
}
if (a != 0 && s == 5)
{
color(5);
}
if (a != 0 && s == 6)
{
color(6);
}
if (a != 0 && s == 7)
{
color(7);
}
if (a != 0 && s == 8)
{
color(8);
}*/
cout << b[i];
a--;
i++;
if (truefalse0 == 1) {
Sleep(10);
}
if (truefalse0 == 2) {
Sleep(20);
}
if (truefalse0 == 3) {
Sleep(40);
}
if (truefalse0 == 4) {
Sleep(100);
}
if (truefalse0 == 5) {
Sleep(300);
}
if (truefalse0 == 6) {
Sleep(1000);
}
}
if (truefalse1 == 0) {
cout << endl;
}
}
constexpr size_t tmp_FNV_offset_basis = 2166136261U;
constexpr size_t tmp_FNV_prime = 16777619U;
size_t hash(string Hash) {//求哈希值
string str = Hash;
size_t val = tmp_FNV_offset_basis;
for (int i = 0; i < str.length(); ++i) {
val ^= static_cast<size_t>(str[i]);
val *= tmp_FNV_prime;
}
return val;
}
void showMenu() {//显示面板
coutAIO("************************", 0);
coutAIO("***** 1.添加联系人 *****", 0);
coutAIO("***** 2.显示联系人 *****", 0);
coutAIO("***** 3.删除联系人 *****", 0);
coutAIO("***** 4.查找联系人 *****", 0);
coutAIO("***** 5.修改联系人 *****", 0);
coutAIO("***** 6.清空通讯录 *****", 0);
coutAIO("***** 0.退出通讯录 *****", 0);
coutAIO("************************", 0);
}//仅供参考
//联系人结构体
struct people {
string m_Name;//姓名
int m_Sex;//性别
int m_Age;//年龄
string m_Phone;//电话
string m_Addr;//住址
}
;
//通讯录结构体
struct Addressbook {
Addressbook() {
m_Size = 0;
ifstream ifs;
ifs.open("MyFriend.txt", ios::in);
char ch;
ifs >> ch;
if (ifs.eof()) {
ifs.close();
return;
}
string name;
int sex;
int age;
string phone;
string addr;
int num = 0;
//空格是分割内容的,便于分别读取数据
//流提取符 >> 会跳过输入流中的空格、tab、换行符等空白字符
while (ifs >> name && ifs >> sex && ifs >> age && ifs >> phone && ifs >> addr) {
peopleArray[num].m_Name = name;
if (!num) {
peopleArray[num].m_Name = ch + name;
}
peopleArray[num].m_Sex = sex;
peopleArray[num].m_Age = age;
peopleArray[num].m_Phone = phone;
peopleArray[num].m_Addr = addr;
num++;
}
m_Size = num;
ifs.close();
}
int m_Size;//人数个数
vector<people> peopleArray;//联系人数组
};
void save(Addressbook * abs) {
ofstream ofs;
ofs.open("MyFriend.txt", ios::out);
for (size_t i = 0; i < abs->m_Size; i++)
{
ofs << abs->peopleArray[i].m_Name << " "
<< abs->peopleArray[i].m_Sex << " "
<< abs->peopleArray[i].m_Age << " "
<< abs->peopleArray[i].m_Phone << " "
<< abs->peopleArray[i].m_Addr << endl;
}
ofs.close();
}
class Cube {
friend void operator <<(ostream& cout, Cube& p);
long double m_L; // 长 length
long double m_W; // 宽 width
long double m_H; // 高 height
public:
Cube(long long a = 0, long long b = 0, long long c = 0) {//分别写出长宽高
this->m_L = a;
this->m_W = b;
this->m_H = c;
}
Cube operator+(Cube& p) {
Cube temp;
temp.m_L = this->m_L + p.m_L;
temp.m_W = this->m_W + p.m_W;
temp.m_H = this->m_H + p.m_H;
return temp;
}
Cube operator-(Cube& p) {
Cube temp;
temp.m_L = this->m_L - p.m_L;
temp.m_W = this->m_W - p.m_W;
temp.m_H = this->m_H - p.m_H;
return temp;
}
Cube operator*(Cube& p) {
Cube temp;
temp.m_L = this->m_L * p.m_L;
temp.m_W = this->m_W * p.m_W;
temp.m_H = this->m_H * p.m_H;
return temp;
}
Cube operator/(Cube& p) {
Cube temp;
temp.m_L = this->m_L / p.m_L;
temp.m_W = this->m_W / p.m_W;
temp.m_H = this->m_H / p.m_H;
return temp;
}
void set_H(long long h) { m_H = h; }
void set_L(long long l) { m_L = l; }
void set_W(long long w) { m_W = w; }
long long get_H() { return m_H; }
long long get_L() { return m_L; }
long long get_W() { return m_W; }
long long area() { // 表面积
return 2 * (m_L * m_W + m_L * m_H + m_W * m_H);
}
bool CompareSurfaceArea(Cube & a, Cube & b) { // 比较表面积
return a.area() > b.area();
}
long long volume() { // 体积
return m_L * m_W* m_H;
}
bool hasSameVolume(Cube & b) { // 比较体积是否相等
return volume() == b.volume();
}
};
//cubage是容积,Compare是比较,
//dia/meter是直径,radius是半径,
//volume是体积,circumference是周长
//Superficial area或surface area是表面积。
//C:组合数 Combination
//A:排列数 Arrangement
//!:阶乘 Factorial
void operator <<(ostream& cout, Cube& p) {
coutAIO("长为 ", 1, 1);
cout << p.m_L << "\t\t";
coutAIO(" ,宽为 ", 1, 1);
cout << p.m_W << "\t\t";
coutAIO(" ,高为 ", 1, 1);
cout << p.m_H;
coutAIO(" 。", 6);
}
void full_screen()
{
HWND hwnd = GetForegroundWindow();
int cx = GetSystemMetrics(SM_CXSCREEN); // 屏幕宽度 像素
int cy = GetSystemMetrics(SM_CYSCREEN); // 屏幕高度 像素
LONG l_WinStyle = GetWindowLong(hwnd, GWL_STYLE); // 获取窗口信息
// 设置窗口信息 最大化 取消标题栏及边框 //
//SetWindowLong(hwnd,GWL_STYLE,( l_WinStyle |WS_MAXIMIZE| WS_POPUP) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER);//
SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, 0);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int* test01() {
static int a = 100;
return &a;
}
string Hex1, Hex2, strans;
int DecArr[MAX] = { 0 };
void Reverse(char* s) {//新轮子,翻转字符串
int n = numberaio(s);
for (int i = 0, j = n - 1; i < j; i++, j--) {
char c = s[i];
s[i] = s[j];
s[j] = c;
}
}
long long HexToDec(string aHex)//转化十六进制
{
long Dec = 0;
int temp = 0;
int count = 0;
int DecCount = 0;
int strlen = aHex.length();
int StrLen = strlen;
while (strlen--)
{
if (aHex[count] < '0' || (aHex[count] > '9' && aHex[count] < 'A') || (aHex[count] > 'F' && aHex[count] < 'a') || aHex[count]>'f')
{
cout << "输入的不是十六进制格式" << endl;
return 0;
}
count++;
}
count = StrLen - 1;
while (StrLen--)
{
if (aHex[count] >= '0' && aHex[count] <= '9')
{
DecArr[DecCount++] = aHex[count] - '0';
}
else if (aHex[count] >= 'A' && aHex[count] <= 'F')
{
DecArr[DecCount++] = aHex[count] - 'A' + 10;
}
else
{
DecArr[DecCount++] = aHex[count] - 'a' + 10;
}
count--;
}
int j = 0;
for (int i = 0; i < DecCount; i++)
{
if (i < 1)
{
Dec = Dec + DecArr[i];
}
else
{
Dec = (Dec + (DecArr[i] * (16 << j)));
j += 4;
}
}
return Dec;
}
void decToHex(long long n)
{
char hexNum[MAX] = "", strtemp[MAX] = "";
int i = 0;
while (n != 0)
{
int temp = 0;
temp = n % 16;
if (temp < 10)
{
hexNum[i] = temp + 48;
i++;
}
else
{
hexNum[i] = temp + 87;
i++;
}
n /= 16;
}
Reverse(hexNum);
strans.assign(hexNum);
}
const int dx[] = { 1,1,1, 0,0,-1,-1,-1 };
const int dy[] = { -1,0,1,-1,1,-1, 0, 1 };
char g[MAX][MAX];
int n, m, cnt;
int main()
{
srand((unsigned)time(NULL));
system("title 通讯录管理系统");
/*FILE* stream;
freopen_s(&stream,"源.in","r",stdin);
freopen_s(&stream,"源.out", "w", stdout);*/
cin >> n >> m;
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < m; j++)
{
cin >> g[i][j];
}
}
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < m; j++)
{
if (g[i][j] != '*') {
cnt = 0;
for (size_t k = 0; k < 8; k++)
{
if (g[i + dx[k]][j + dy[k]] == '*') {
cnt++;
}
}
cout << cnt << " ";
}
else {
cout << "* ";
}
}
cout << endl;
}
system("pause");
bukaqingping();
return 0;
}