各位大侠请进~谢谢
我有个程序,功能为:输入整数2,第一次变化数组后移2*1位,然后把src[10],src[11]的内容放回src[0],src[1],得到新的数组; 第二次变化后移2*2位,然后把src[10],src[11],src[12],src[13]的内容放回src[0],src[1],src[2],src[3]得到新的数组;依上规律变化4次,那就得到4个由相同内容但排列顺序不同的数组1,2,3,4。 输入要查找的 字符ABC,其中A在1中查找,其中B在2中查找,其中C在3中查找,把连续三次可以查到的地址对应数组4,然后把4对应的内容输出;把连续三次可以没有查到的地址对应数组4,然后把4对应的内容输出。现我想把字符数组由英文换为中文:如下!请问如何处理,请给程序给出注释。谢谢
src[10][4] = {
{'金','木','水','火'},
{'水','木','金','土'},
{'木','土','水','火'},
{'土','水','金','木'},
{'火','水','土','金'},
{'水','金','木','火'},
{'火','土','金','木'},
{'土','木','金','水'},
{'金','水','土','木'},
{'金','土','木','水'}
};
原程序代码如下:
#include <stdio.h>
#include <stdlib.h>
char src[10][4] = {
{'A','B','C','H'},
{'B','H','D','L'},
{'A','E','C','K'},
{'E','D','A','L'},
{'E','F','A','K'},
{'F','D','E','H'},
{'C','F','A','L'},
{'F','B','A','K'},
{'A','E','F','L'},
{'C','A','B','L'}
};
char change[10][10][4];
void print_array(char *s, int line, int column)
{
int i,j = 1;
for( i = 0; i < line * column; i++){
if( ! ( i % column)) printf("%2d: ", j++);
printf("%c ", *(s+i));
if( ! ( ( i + 1) % column))
printf("\n");
}
}
void print_three_array(char *s, int t, int line, int column)
{
int i, j, k;
for( j = 0; j < line; j++){
printf("%2d: ", j+1);
for( i = 0; i < t; i++){
for( k = 0; k < column; k++){
printf("%c ",
*(s + ( i * line * column) + ( j * column ) + k));
}
printf(" ");
}
printf("\n");
}
}
void do_change(char* src, int line, int column,
char* dst, int offset, int change_time)
{
int i,j,k;
printf("do_change: line %d, column %d, offset %d, change_time %d\n",
line, column, offset, change_time);
for( i = 0; i < change_time; i++){
for( j = 0; j < line; j++){
for( k = 0; k < column; k++){
*(dst + (i*line*column) + ( ((j+(offset * (i+1)))%line) * column) + k) = *(src + j * column + k);
}
}
}
}
void search(char* sfor, char* dst, int t, int line, int column)
{
char *s = sfor;
char hit[10];
int i = 0,j = 0,k = 0;
char sc;
for( j = 0; j < sizeof(hit)/sizeof(char); j++)
hit[j] = 0;
while( (sc = (*s++)) != '\0'){
if( sc == ' ' || sc == '\n') continue;
for(j = 0; j < line; j++){
for( k = 0; k < column; k++){
if( *(dst + ( i * line * column) + (j * column) + k) == sc){
hit[j]++;
}
}
}
i++;
}
for(j = 0; j < line; j++){
if(hit[j] == 0){
printf("%s: line %d no char found :", sfor, j+1);
for( i = 0; i < t; i++){
printf(" ");
for( k = 0; k < column; k++){
printf(" %c", *(dst+(i*line*column)+j*column+k));
}
}
printf("\n");
}
if(hit[j] >= (t-1)){
printf("%s: line %d found all char:", sfor, j+1);
for( i = 0; i < t; i++){
printf(" ");
for( k = 0; k < column; k++){
printf(" %c", *(dst+(i*line*column)+j*column+k));
}
}
printf("\n");
}
}
}
int main(int argc, char** argv)
{
int offset;
int change_time;
char c;
char *tmp;
char search_char[10];
printf("The original charset is:\n");
print_array( src[0], 10, 4);
printf("Please enter offset(M): ");
scanf("%d", &offset);
getchar();
printf("Please enter the chars for search: ");
fgets(search_char, sizeof(search_char), stdin);
change_time = 0;
tmp = search_char;
while( *tmp++ != '\0'){
c = *tmp;
if( c == ' ' || c == '\n' || c == ','){
*tmp = ' ';
continue;
}
change_time ++;
}
change_time++;
if( offset * (change_time) > 10){
printf("offset or search chars is too big/more\n");
exit(0);
}
do_change(src[0], 10, 4, change[0][0], offset, change_time);
print_three_array(change[0][0], change_time, 10, 4);
search(search_char, change[0][0], change_time, 10, 4);
return 0;
getch();
}