- 论坛徽章:
- 0
|
在 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
从红色的地方字符出现的次数就出现了问题,什么原因啊?请 |
|