各位大侠请进~谢谢

dbl36269927 2005-06-13 08:58:57
我有个程序,功能为:输入整数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();
}
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nasi00 2005-06-13
  • 打赏
  • 举报
回复
开发环境能说一下吗?
herryhuang 2005-06-13
  • 打赏
  • 举报
回复
C语言中的字符含义是“一个字节”,而汉字是宽字符集,要占用两个字节,单引号用来表示“一个字节”,所以不能使用,保存汉字,必须使用字符串

定义:
char* src[10][4] = {
{"A","B","C","H"},
.........

其他地方相应更改,并且,这样定义的字符串时字符常量,根据标准,不能更改其内容(可能有的编译器允许,不过这是很危险的),如果想要这些常量还能够更改内容,可以定义成三维字符数组。

字符串操作与字符操作有很多不同,程序中相关的地方统统要替换掉,例如:
字符串比较:
strcmp(str1, str2);

字符串复制(或可以理解为赋值):
strcpy(str1, str2);

等等
tfq 2005-06-13
  • 打赏
  • 举报
回复
不是一样的吗?
shadow22 2005-06-13
  • 打赏
  • 举报
回复
现在上班,没时间看,先up
dbl36269927 2005-06-13
  • 打赏
  • 举报
回复
哪把字符数组由字符换为整型呢:如下!请问如何处理,请给程序给出注释。谢谢
程序功能和字符的时候一样,不过现在查找的是 0-9 任意三个数字。
src[10][4] = {
{'1','2','3','5'},
{'4','9','7','8'},
{'1','3','5','7'},
{'5','6','7','8'},
{'3','8','4','6'},
{'1','3','9','8'},
{'5','3','1','2'},
{'7','9','6','2'},
{'8','5','6','8'},
{'7','4','3','2'}
};
tfq 2005-06-13
  • 打赏
  • 举报
回复
可能涉及一些汉字字库文件,不懂,Up
dbl36269927 2005-06-13
  • 打赏
  • 举报
回复
win2000 用win-tc 写C程序。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧