gpt4 book ai didi

c - 计算C中2D字符数组中字符出现的次数

转载 作者:行者123 更新时间:2023-11-30 21:38:37 25 4
gpt4 key购买 nike

#include<stdio.h>
#include <stdlib.h>

int main()
{

char a[100][100],ch;

int b[100][100],i,j,k,n,x,y,count,l,m;
count=0;

scanf("%d",&n);/*Number of lines of input to be read*/

for(i=0;i<n;i++)/*To read the input*/
{
scanf("%s",a[i]);
}

for(i=0;i<n;i++) /*To separate the blast radius from char array a*/
for(j=0;j<n;j++)
{
if(a[i][j]!='P'&&a[i][j]!='p'&&a[i][j]!='*')
b[i][j]=a[i][j]-'0';
else
b[i][j]=0;
}

for(i=0;i<n;i++)
for(j=0;j<n;j++)
{

if(b[i][j]!=0)
{
k=b[i][j];
for(x=i-k;x<=i+k;x++)
for(y=j-k;y<=j+k;y++)
a[x][y]='X';

}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=ch;
if(ch=='p')
count++;
}

printf("%d",count);

}


输入如下
6
p *
**** p *
* p * 1 **
***** p
*** p * p
*** pp2

爆炸后,网格变为( X是爆炸区域)
p *
** XXX *
pX1X
** XXXX
*** XXX
*** XX2

我在查找最终数组中 p的出现次数时遇到麻烦。请帮忙

最佳答案

您的代码中有两个不同的问题。

第一:

k=b[i][j];
for(x=i-k;x<=i+k;x++)
for(y=j-k;y<=j+k;y++)
a[x][y]='X';


在这里,您需要进行边界检查,以确保您不写数组之外。例如,如果炸弹位于(0,0)上,则 i-k为负。
边界检查:

for(x=i-k;x<=i+k;x++)
for(y=j-k;y<=j+k;y++)
if(x>=0 && x<n && y>=0 && y<n)
a[x][y]='X';


第二个问题:

for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=ch;
if(ch=='p')
count++;
}


在这里,您将 a的每个元素都设置为未初始化的 ch。我认为您想直接将 a的元素与 'p'进行比较。

for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j]=='p' || a[i][j]=='P')
count++;
}

关于c - 计算C中2D字符数组中字符出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51250240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com