免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 983 | 回复: 1
打印 上一主题 下一主题

字符输出的问题~~~谢谢,请赐教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-15 19:57 |只看该作者 |倒序浏览
在 file.txt中放着一个字符串,由A、B、C以及空格等组成。我的程序是用来统计3个字符A、B、C连续出现的次数的,然后把字符以及其出现的次数放在2个不同的文件中。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#define LIZE 1000
int display(char *str);
/*          main()        */
int main(void)
{
   FILE *fp1;
   char *p;
   char *str;
   char a[138];
   int i,leng=0;
     
       if ((fp1=fopen("E:\\material\\struc_func\\pdb_select\\1898_dssp\\file.txt", "r")) == NULL)
   {
      printf("Can not open the file!\n");
      exit(1);
   }
    p = str = (char *)malloc(LIZE*sizeof(char));//分配内存
   while(!feof(fp1))
{
  fgets(a,138,fp1);
   leng=strlen(a);
    str=a;
    printf("%s\n",str);
    display(str);//显示字符以及连续出现的次数
    printf("\n");
}
fclose(fp1);
return 0;
}
  /*             display()       */
int display(char *str)
{
  FILE *fp3,*fp4,*fp5;
  char *p = str;
  char temp;
  int  count = 0;
  fp3=fopen("结构.txt","at");//放字符
  fp4=fopen("数量","at");//放该字符出现的次数
fp5=fopen("检验.txt","at");
  for (temp=*p; *p!='\0'; p++,count=1)
  {
     while (*p == temp) count++,p++;
  
     if((temp == 'A'))
{
fputc('A',fp3);
fwrite(&count,sizeof(int),1,fp4);
fprintf(fp5,"%c%d",temp,count);
}
      if((temp == 'B'))
{
fputc('B',fp3);
fwrite(&count,sizeof(int),1,fp4);
fprintf(fp5,"%c%d",temp,count);
}
     if((temp == 'C'))
{
fputc('C',fp3);
fwrite(&count,sizeof(int),1,fp4);
fprintf(fp5,"%c%d",temp,count);
}
     if((temp == ' '))
{
fputc(temp,fp3);
fwrite(&count,sizeof(int),1,fp4);
fprintf(fp5,"%c%d",temp,count);
}
        if(temp == '\0') break;
     temp = *p;
  }
  fputc('\n',fp3);
  fputc('\n',fp4);
  fputc('\n',fp5);
  fclose(fp3);
  fclose(fp4);
  fclose(fp5);
  return 0;
}
这是输出的结果:字符后的数字是该字符出现的次数。
7C2 1A6C1 2C4 2C2 1C1 2B7C1 4C11 2C1 2B13C6B13 2C1 1C3 1C1 1B20C2B14 4C3 2B13C2B11C1 3C4A5 1C1B9C2B10C4B11C4 1B10 1C7 1B10C1 4
而为什么我用下面的程序,去读这些字符相对应出现的次数时,而有的字符对应的数字就不是这样啊?
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <malloc.h>
/*          main()        */
int main(void)
{
   FILE *fp,*fp1,*fp2;
   char a[1000];
   int b[1000];
   int i,leng1=0;  
   for(i=0;i<1000;i++)
   {
    a='\0';
       }
   fp2=fopen("aaaaa.txt","w");
  if ((fp=fopen("E:\\material\\struc_func\\pdb_select\\1898_dssp\\结构.txt", "r")) == NULL)
   {
      printf("Can not open the file!\n");
      exit(1);
   }
       fgets(a,1000,fp);
    leng1=strlen(a);
    printf("leng1=%d\n",leng1);
    for(i=0;i<leng1;i++)
    {
    b=0;
    }
   
if ((fp1=fopen("E:\\material\\struc_func\\pdb_select\\1898_dssp\\数量", "rb")) == NULL)
   {
      printf("Can not open the file!\n");
      exit(1);
   }
     for(i=0;i<leng1;i++)
   {
    fread(&b,sizeof(int),1,fp1);
    fprintf(fp2," %c",a);
    fprintf("fp2, " %d",b);
   }
  return 0;
}
7C2 1A6C1 2C4 2C2 1C1 2B7C1 4C11 2C1 2B13C6B13 2C1 1C3 1C1 1B20C2B14 4C3 2B13C2B11C1 3C4A5 1C1B9C2B2573C1024B2816C1024 256B658688 65536C458752 65536B168624128C16777216 67108864
从红色的地方字符出现的次数就出现了问题,什么原因啊?请

论坛徽章:
0
2 [报告]
发表于 2006-04-15 19:59 |只看该作者
7C2 1A6C1 2C4 2C2 1C1 2B7C1 4C11 2C1 2B13C6B13 2C1 1C3 1C1 1B20C2B14 4C3 2B13C2B11C1 3C4A5 1C1B9C2B2573C1024B2816C1024 256B658688 65536C458752 65536B168624128C16777216 67108864
从红色的地方字符出现的次数,输出就出现了问题,为什么?

上面的最后一行发错了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP