XJ_XPY 2017-11-16 14:08 采纳率: 0%
浏览 1916

读文件中的字符并记录每个字符出现的频率

下面是我的C++代码段,编译都没错,运行时输入一个和.cpp文件放一起的文件的文件名,例如“test.txt”,但在运行后,最后会输出一个已经出现记录过的字符,并且它的频率貌似溢出, 导致程序出错,可是代码没错呀,这是为什么??跪求大神指教

 #include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

int main()
{
    /** 保存字符个数 **/
    int count = 0;

    /** 保存文件名 **/
    char fname[80];
    char ch;//用于输出字符变量

    /** 文件指针 **/
    FILE *fp;

    cout<<"请输入文件的名称(含后缀):";
    cin>>fname;

    if((fp = fopen(fname,"r")) == NULL)
    {
        cout<<"文件打开失败!"<<endl;
        exit(1);
    }

    char *Array=new char[count];//创建存储字符的数组
    int *countArray=new int[count];//创建用于记录字符频率的数组
    int i=0;
    while((ch=fgetc(fp))!=EOF)
    {  
        count++; 
        Array[i]=ch;
        countArray[i]=-1;//数组的内容全部置为-1,有字符则该数组变化
        i++;
    }
    for(int j=0;j<count;j++)//开始遍历数组并记录频率
    {
        int sum=1;
        for(int k=j+1;k<count;k++)
        {
            if(Array[j]==Array[k])
            {
                countArray[k]=0;
                sum++;
            }
        }
        if(countArray[j]!=0)
        {
            countArray[j]=sum;
        }
    }
    for(int t=0;t<count;t++)//输出出现的字符并输出频率
    {
        if(countArray[t]!=0)
        {
            cout<<"元素为:"<<"“"<<Array[t]<<"”"<<"  "<<"对应的频率为:"<<countArray[t]<<endl;
        }
    }
    fclose(fp);//关闭文件

    cout<<fname<<"文件里共有"<<count<<"个字符!"<<endl;

    return 0;
}

图片说明

  • 写回答

3条回答

  • devmiao 2017-11-16 15:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Error in check.length("fill") : 'gpar'成分'fill'的长度不能为零
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导