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

时间:2018-07-09 16:35:36

标签: c

#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的出现次数时遇到麻烦。请帮助

1 个答案:

答案 0 :(得分: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';

在这里,您需要进行边界检查,以确保您不写数组之外。例如,如果炸弹放在(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++;
 }