c语言二维字符数组寻找字符串
一个二维数组中寻找字符串出现的次数,例如Mtauy
Eedio
Adada
Gbdac
Crawm 其中ada出现了三次,
从左往右,从右往左,从上往下,从下往上读
可以部分重叠,但不可以全部重叠
如何编程
#include <stdio.h> #include<string.h> int main() { int n,m,i,j,count=0,k,d; char a[20][20],b[20]; printf("请输入维数\n"); scanf("%d",&n); printf("请输入n*n个字符\n"); for(i=0;i<n;i++) //for(j=0;j<n;j++) scanf("%s",a[i]); printf("输入要找的字符串\n"); scanf("%s",b); m=strlen(b); for(i=0;i<n;i++) for(j=0;j<n;j++) { if(a[i][j]==b[0]) { if(n-i-1>=m) //从左到右 { for(k=i;k<=i+m;k++) { if(a[k][j]==b[k]) d++; } if(d==m) count++; d=0; } if(i+1>=m) //从右到左 { for(k=i;k>=i-m;k--) { if(a[k][j]==b[m-(i-k)]) d++; } if(d==m) count++; d=0; } if(n-j-1>=m) //从上到下 { for(k=j;k<=j+m;k++) { if(a[i][k]==b[k]) d++; } if(d==m) count++; d=0; } if(j+1>=m) //从下到上 { for(k=j;k>=j-m;k--) { if(a[i][k]==b[m-(j-k)]) d++; } if(d==m) count++; d=0; } } } printf("%d",count); return 0; }
#include <stdio.h> #include<string.h> int main() { int n,m,i,j,count=0,k,d; char a[20][20],b[20]; printf("请输入维数\n"); scanf("%d",&n); printf("请输入n*n个字符\n"); for(i=0;i<n;i++) //for(j=0;j<n;j++) scanf("%s",a[i]); printf("输入要找的字符串\n"); scanf("%s",b); m=strlen(b); for(i=0;i<n;i++) for(j=0;j<n;j++) { if(a[i][j]==b[0]) { if(n-i-1>=m) //从左到右 { for(k=i;k<=i+m;k++) { if(a[k][j]==b[k]) d++; } if(d==m) count++; d=0; } if(i+1>=m) //从右到左 { for(k=i;k>=i-m;k--) { if(a[k][j]==b[m-(i-k)]) d++; } if(d==m) count++; d=0; } if(n-j-1>=m) //从上到下 { for(k=j;k<=j+m;k++) { if(a[i][k]==b[k]) d++; } if(d==m) count++; d=0; } if(j+1>=m) //从下到上 { for(k=j;k>=j-m;k--) { if(a[i][k]==b[m-(j-k)]) d++; } if(d==m) count++; d=0; } } } printf("%d",count); return 0; }