精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>○ DOS>>工具箱>>汉字字符串替换

主题:汉字字符串替换
发信人: yangcs()
整理人: yangcs(2000-01-21 09:33:27), 站内信件
    前两天我为了把一个文件里一堆汉字字符串替换成其它字符串,如:
把汉字表线替换成+-|,我曾经有个替换程序,把一个文件里一堆字符串
替换成其它字符串,但可能对汉字可能会换错,于是重编一个程序,贴上
给大家共享。

# include <stdio.h>
# define N 1000
main(n,v)
int n;
unsigned char *v[];
{
unsigned char c1,c2;
int i,k,m,m0;
long j,kk;
unsigned char s[N],t[N],*x,*y;
FILE *fp;
if(n!=4)
  {
  puts("命令格式: CTH 文件名 原字符串 新字符串");
  exit(1);
  }

if((fp=fopen(v[1],"r+b"))==NULL)
  {
  printf("文件%s没找到!\n",v[1]);
  exit(2);
  }

sscanf(v[2],"%s",s);
sscanf(v[3],"%s",t);
for(m=0,x=s,y=s;*x;)
   {
   if(*x=='\\')
     {
     c1=*(++x);
     c2=*(++x);
     ++x;
     *y++= (char)(to16c(c1) <<4) | to16c(c2);
}
else
*y++ = *x++;
++m;
}
*y=0;

for(m0=0,x=t,y=t;*x;)
{
if(*x=='\\')
{
c1=*(++x);
c2=*(++x);
++x;
*y++=(char) (to16c(c1) << 4) | to16c(c2);
}
else
*y++=*x++;
m0++;
}
*y=0;


if(m!=m0)
{
puts("字符串不等长!");
exit(3);
}

j=0l; k=0;
kk=0;
while(fread(&c1,1,1,fp)>0)
   {
   if(c1==s[k])
     k++;
   else
     {
     j++;
     if(k)
       {
       if(s[0]>=160)
 j++;
       k=0;
       }
     else
       {
       if(c1>=160)
 j++;
       }
     fseek(fp,j,0);

     }
  if(k==m)
       {
       fseek(fp,j,0);
       fwrite(t,1,m,fp);
       k=0;kk++;j+=(long)m;
       fseek(fp,j,0);
       }
   }
printf("项数:  %ld\n",kk);
fclose(fp);
}

to16c(c)
char c;
{
char i,j,k;
k=0;
j=c&0xdf;
if((j>='A') && (j<='F'))
k=10+j-'A';
if((c>='0') && (c<='9'))
k=c-'0';
return(k);
}


--
欢迎到DOS版讨论一些核心问题和简单问题。
那里有一只老羊——哈哈,天使——一条狼。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.72.45.132]

[关闭][返回]