下面是ACM中的Graphical Edit程序,如果考虑数组是行或是列大于9的情况,可以再加一个函数处理一下,比较简间,这里只考虑了小于9的情况。 // Graphical Edit.cpp : Defines the entry point for the console application. // #include "stdafx.h" using namespace std; char data[20]={'/0'}; int M,N; char ** CreatePixel(char a[20]); void DisplayArray(char **a, int b,int c,char d[20]); char **ClearArray(char **a,int b,int c); char **LArray(char **a,char d[20]); char **VArray(char **a,char d[20]); char **HArray(char **a,char d[20]); char **KArray(char **a,char d[20]); void DeleteArray(char **a,int b); int _tmain(int argc, _TCHAR* argv[]) { char **pixel; while(cin.getline(data,20)) { for(int i=0;i<strlen(data);++i) { if(data[i]==' ') { for(int j=i;j<strlen(data);++j) { data[j]=data[j+1]; } } } if(data[0]=='I') pixel=CreatePixel(data); if(data[0]=='S') DisplayArray(&pixel[0],M,N,data); if(data[0]=='C')pixel=ClearArray(&pixel[0],M,N); if(data[0]=='L')pixel=LArray(&pixel[0],data); if(data[0]=='V')pixel=VArray(&pixel[0],data); if(data[0]=='H')pixel=HArray(&pixel[0],data); if(data[0]=='K')pixel=KArray(&pixel[0],data); if(data[0]=='X')DeleteArray(&pixel[0],N); } return 0; } char ** CreatePixel(char a[20]) { M=a[1]-48; N=a[2]-48; static char **PixelArray=new char*[N]; for(int n=0;n<N;++n) { PixelArray[n]=new char[M]; for(int m=0;m<M;++m) { PixelArray[n][m]='0'; } } for(int i=0;i<N;++i) { for(int j=0;j<M;++j) { PixelArray[i][j]='0'; } } return PixelArray; } void DisplayArray(char **a, int b,int c,char d[20]) { for(int i=1;i<strlen(d);++i) { cout<<data[i]; } cout<<'/n'; for(int i=0;i<c;++i) { for(int j=0;j<b;++j) { if(j==(b-1)) { cout<<a[i][j]<<'/n'; } else { cout<<a[i][j]; } } } } char **ClearArray(char **a,int b,int c) { for(int i=0;i<c;++i) { for(int j=0;j<b;++j) { a[i][j]='0'; } } return a; } char **LArray(char **a,char d[20]) { int X=d[1]-48; int Y=d[2]-48; char A=d[3]; a[Y-1][X-1]=A; return a; } char **VArray(char **a,char d[20]) { int X=d[1]-48; int Y1=d[2]-48; int Y2=d[3]-48; int A=d[4]; for(int i=Y1-1;i<=Y2-1;++i) { a[i][X]=A; } return a; } char **HArray(char **a,char d[20]) { int X1=d[1]-48; int X2=d[2]-48; int Y=d[3]-48; int A=d[4]; for(int i=X1-1;i<=X2-1;++i) { a[Y][i]=A; } return a; } char **KArray(char **a,char d[20]) { int X1=d[1]-48; int Y1=d[2]-48; int X2=d[3]-48; int Y2=d[4]-48; char A=d[5]; for(int i=Y1-1;i<=Y2-1;++i) { for(int j=X1-1;j<=X2-1;++j) { a[i][j]=A; } } return a; } void DeleteArray(char **a,int b) { for(int i=0;i<b;++i)delete a[i]; delete []a; }