csu_17 2015-05-20 11:22 采纳率: 44.4%
浏览 1601

求助 不能输出预想结果怎么办?

//第二题第一问
#include
#include
#include
#include
using namespace std;
int arr[27];
int order[27];
int ar[27];
int ord[27];

int cmp(const void a, const void *b)
{
return arr[
(int )a] - arr[(int *)b];

}
void qso(int a[],int o[], int l, int r)//a[]个数,o[]字母
{
if (l< r)
{
int i = l, j = r;
int x = a[l];
int y = o[l];
while (i < j)
{
while(i < j && a[j]>= x)
j--;
{
a[i] = a[j];
o[i] = o[j];

}
while(i < j && a[i]<= x)
i++;
{
a[j] = a[i];
o[j] = o[i];
}
}
a[i] = x;
o[i] = y;
qso(a,o, l, i - 1);
qso(a,o, i + 1, r);
}
}
void part1()
{

int i;
memset(arr, 0, sizeof(int) * 27);//memset char型初始化函数
ifstream in;
in.open("E:\data.txt",ios::in|ios::beg);//打开文件
int all = 0;
for (string s; getline(in,s); )
{
const char * pchar = s.c_str();
int len = strlen(pchar);
for (int i = 0; i < len; i++)

    {
        all++;
        if (pchar[i] >= 'a' && pchar[i] <= 'z')
        {
            arr[pchar[i] - 'a']++;

        }
        if (pchar[i] >= 'A' && pchar[i] <= 'Z')
        {
            arr[pchar[i] - 'A']++;
            continue;
        }
        arr[26]++;
    }
}
//第一,三部分输出排序 
for (int i = 0; i < 27; i++)
{
    order[i] = i;
};
cout<<"字母总数为:"<<all<< endl; 
qsort(order, 27, sizeof(int), cmp);//频率从小到大排序,在头文件stdlib.h中     
for(i = 0;i < 26;i++)
{   
    cout<<"排名"<<26-i<<'\t'<<(char)(65 + order[i])<<"字母数目为:"<<(double)arr[order[i]]<<"\t"<<"字母频率为:"<<(double)arr[order[i]] * 100.0/(double)all<<"%"<<endl; 
}   

//cout << "other\t" <<"数目为:" <<(double)arr[order[27]]<<'\t'<< (double)arr[27] * 100.0 / (double)all << "%" << endl;
in.close(); 


ofstream out("E:\\result.txt",ios::out);//以输出方式打开文件 result.dat接收从内存输出的数据
if(!out)
{
    cerr<<"很抱歉,资料读取错误!"<<endl;
} 
out<<"字母总数为:"<<all<< endl;
for(i = 0;i < 26;i++) 
{           
    out<<"排名:"<<26 - i<<'\t'<<(char)(65 + order[i])<<'\t'<<"字母数目为:"<<(double)arr[order[i]]<<"\t"<<"字母频率为:"<<(double)arr[order[i]] * 100.0/(double)all<<"%"<<endl; 
}
//out << "other\t" <<'\t'<<"数目为:" <<(double)arr[order[26]]<<'\t'<<'\t'<<(double)arr[26] * 100.0 / (double)all << "%" << endl;
out.close();

}

//第二部分:找出一起出现的频率最高的三个字母
void part2()
{

int j;
char x,y,z,ch;//y当前读入的字符,z下一个字符,x输入的想要寻找的字符
cout<<"请输入您想查询亲密关系的字母:"< cin>>x;
for(j=0;j ifstream in;
in.open("E:\\data.txt",ios::in|ios::beg);//打开文件
for (string s; getline(in,s);)
{
const char * pchar = s.c_str();//临时指针 ,内容不可变更
int len = strlen(pchar);
in.get(ch);
z = in.peek();
y = ch;
for (int j = 0; j {
if ( x == y )
{
if(z>='a'&&z<='z') ar[z - 'a']++;//如果查询字符为当前字符,那么n的个数加1
if(z>='A'&&z<='Z') ar[z - 'A']++;
else continue;//结束本次循环,执行下次循环
}
if ( x == z )
{
if(y>='a'&&y<='z') ar[y-'a']++;//如果查询字符为当前字符的下一个字符,那么当前字符的个数加1
if(y>='A'&&y<='Z') ar[y-'A']++;
else continue;
}

}

}
qso(ar,ord,0,25);
for(j = 0;j < 26;j++)
{

cout<<"排名"<<26-j<<'\t'<<(char)(97 + ord[j])<<'\t'<<(double)ar[ord[j]]<<' '<<endl;//continue;

}
ofstream out;
out.open("E:\result.txt",ios::out|ios::app);
for(j = 0;j < 26;j++)
{

out<<"排名"<<26-j<<'\t'<<(char)(97 + ord[j])<<'\t'<<(double)ar[ord[j]]<<' '<<endl;//continue;

}
out.close();
}

int main()
{

part1();
part2();

return 0;

}

题目是:在网上下载英文文章,要求字母个数在1万以上,如果不到1万,请下载多篇合并,命名为data.txt。
输入一个字母,找出和它最亲密的三个字母(最亲密的意思是:和它一起相邻出现的次数最多)。//比较难
我是在part2部分有问题

  • 写回答

5条回答 默认 最新

  • csu_17 2015-05-20 11:26
    关注

    英文文章,命名为data.txt。
    输入一个字母,找出和它最亲密的三个字母(最亲密的意思是:和它一起相邻出现的次数最多)。//比较难

    题目是这个

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮