的指針,在這個問題上,首先,你必須寫兩個功能:功課陣列和C++
new_array (char** a, int n, int m): create a two-dimension matrix of characters whose size is m*n.
del_array (char** a, int n, int m): delete a two-dimension matrix of characters whose size is m*n.
之後,您使用兩個以上的函數來執行以下任務: 給你一個大尺寸爲M*N
的大圖像以及尺寸爲m*n
的一些小圖像。每幅圖像都由大小的字符矩陣表示。您的任務是查找每個小圖像在該大圖像中出現的位置數量。
輸入文件:image.inp
。
輸入文件的第一行包含兩個正整數M和N,它們分別是大圖像的高度和寬度。 每行2
... M+1
由N
個字符(a
... z
,A
... Z
)組成,其中描述了大圖像的一行。
隨後,有一些小圖像,你必須找到大圖像。每張小圖像都是以大圖形式寫成的。特別是,有一條線m
= 0和n
= 0,您必須結束您的查找過程。
輸出文件:image.out
。
對於輸入文件中的每個小圖像,您必須編寫一個數字,表示該小圖像在大圖像中出現的位置數量。
image.inp image.out
4 4 3
Aaaa 1
Aaaa
Aaab
Aaaa
2 2
Aa
Aa
2 2
aa
ab
0 0
我這樣做:
文件頭:
image.h
:#ifndef _IMAGE_H_ #define _IMAGE_H_ using namespace std; void new_array (char** , int , int); void del_array (char** , int , ); bool small_image(char**,char**,int,int,int,int) int count_small_image(char** , char** , int ,int ,int ,int); #endif
文件
image.cpp
:#include<iostream> #include "image.h" #include <fstream> using namespace std; void new_array(char** a, int n,int m)
{ ifstream inStream; inStream.open(「image.inp」);
a=new char* [m] ; for(int i=0; i<m; i++) { a[i]=new char[n]; for(int j=0;j<n; j++) inStream>>a[i][j]; } } void del_array(char** a,int m) { for(int i=0;i<m ;i++) { delete [] a[i]; } delete [] a; } bool small_image(char** a,char** b, int i,int j,int p,int q) { for(int u=i;u<i+p;u++) { for(int v=j;v<j+q;v++) { if(a[u][v]!=b[u-i][v-j]) return false; } } return true; } int count_small_image(char** a,char** b,int m,int n,int p, int q) { int COUNT=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(a[i][j]==b[0][0]) { if((m-i+1)>=p && (n-j+1)>=q) { if(small_image(a,b,i,j,p,q)==false) break; else COUNT++; } } } return COUNT; }
文件
main_count_small_image.cpp
:#include <iostream> #include "image.h" #include <fstream> using namespace std; int main() { ifstream inStream; inStream.open("image.inp"); ofstream outStream; outStream.open("image.out"); int m,n,p,q; char** a; char** b; inStream>>n>>m; new_array(a,n,m); inStream>>q>>p; new_array(b,q,p); int c; c=count_small_image(a,b,m,n,p,q); outStream<<c; del_array(a,m); del_array(b,p); return 0; getchar(); }
但是,我得到:
[錯誤]:已停止工作......
我認爲沒有人可以爲你的代碼指責你......這個問題本身強迫人寫出難看的代碼。誰給你這麼糟糕的問題? –
使用調試器。提示:改變局部變量只會產生局部效應。 –
你能多說一點嗎? Karoly Horvath – Jack