代码-C++编程 算法 求助!!!

问题描述

C++编程 算法 求助!!!
在一篇英文文章中,输入一个字母,请输出与该字母一起出现频率最高的三个字母。
如:输入s,可能和s一起出现频率最高的就是t,e.....
想知道算法!!!如果可以,可以给个代码作为参考吗?非常谢谢

解决方案

之前回答过你的问题。
和计算出现频率最高的字母其实类似,只不过那个只需要一个向量保存结果,这个需要一个矩阵,保存字母转移关系。最后统计输出。要代码,请采纳。

解决方案二:
我的想法是这样:
建立一个代表字母的数组a[300],比如a[A]表示A出现的次数。
那么当搜索到一个单词的时候,如果出现了你一开始输入的那个字母,只要把这个单词里其他字母的对应a[(char)]++即可。
最后在这里找一下数字最大的三个就行啦!

解决方案三:

  • 一起出现时什么概念?紧挨着出现?还是在同一个单词中出现?还是其他?这个需要说明才行。
  • 我们假设说是同一个单词中出现,给你个算法。
  • 1.两个数组,每个数组26个元素。一个数组作为最终结果,一个数组作为临时结果。一个标志位表示本单词中有没有出现目标字母
  • 2.循环扫描文章。遇到目标字母,标志位设真;其他的,对应临时数组元素+1;遇到空格、tab、回车等分词符,判断标志位,决定是否将临时数组中的结果加到最终结果数组中,临时数组清空,标志位设假。
  • 3.全部文章扫描完以后,在最终结果中选择数字最大的三个元素输出。

解决方案四:
c语言写的,这个跟c++应该没多少区别吧

 #include <stdio.h>#include <stdlib.h>#include <ctype.h>int main(){       int count[26] = {0};        char keyword;    char pre_kw;    char ch;    int i;    FILE *fp;    if((fp = fopen(""artical.txt""r"")) == NULL)    {        printf(""file open faild!n"");        exit(0);    }    scanf(""%c"" &keyword);    ch = fgetc(fp);    while(feof(fp) == 0)    {        if(ch == keyword)         {            if(isalpha(pre_kw) != 0) count[tolower(pre_kw) - 97]++;            pre_kw = ch;            ch = fgetc(fp);            if(isalpha(ch) != 0) count[tolower(ch) - 97]++;        }        else         {            pre_kw = ch;            ch = fgetc(fp);        }    }    for(i = 0; i< 26; i++)    {        if(i%8 == 0)printf(""n"");        printf(""%c %d   "" i + 97 count[i]);    }    printf(""n"");    return 0;}

解决方案五:
@caozhy 请问能帮看一下吗?我知道有很多很明显的错误,请指点!

//第二题第一问
#include
#include
#include
#include
using namespace std;
int ar[27];//26个字母和非字母的个数
int ord[27];//26个字母的其他非字母的频率高低排序
int cmp(const void a const void *b)//执行减法的操作 ,不保存运算结果
{
return ar[
(int )a] - ar[(int *)b];
}

int main()
{

int j;
char ch;
cout<<""请输入您想查询亲密关系的字母:""< cin>>ch;
memset(ar 0 sizeof(int) * 27);

ifstream in(""data1.txt"");//打开文件
for (string s; getline(ins);)
{
const char * pchar = s.c_str();//临时指针 ,内容不可变更
int len = strlen(pchar);

for (int j = 0; j < len; j++)
{
if ( pchar[j] == ch )
{
if(cin.peek()>='a'||cin.peek()>='z') ar[cin.peek() - 'a']++;//如果查询字符为当前字符,那么n的个数加1
if(cin.peek()<='A'||cin.peek()>='Z') ar[cin.peek() - 'A']++;
continue;
}
if ( cin.peek() == ch )
{
if(cin.peek()>='a'||cin.peek()>='z') ar[pchar[j]-'a']++;//如果查询字符为当前字符的下一个字符,那么当前字符的个数加1
if(cin.peek()<='A'||cin.peek()>='Z') ar[pchar[j]-'A']++;
continue;
}

}

}
for (int j = 0; j < 27; j++)
{
ord[j] = j;
};

qsort(ord 27 sizeof(int) cmp);//频率从小到大排序,在头文件stdlib.h中

for(j = 25;j >= 0;j--)
{

for(i=0;i<26;i++) cout<<(char)(bb[i]+97)<<c[i]<<' ';
}
cout<<endl;
in.close();
return 0;
}

时间: 2024-10-05 20:05:11

代码-C++编程 算法 求助!!!的相关文章

c++-C++编程 算法 求助!!!

问题描述 C++编程 算法 求助!!! C++编程 算法 求助!!! c++代码编程出现频率 在一篇英文文章中,输入一个字母,请输出与该字母一起出现频率最高的三个字母. 如:输入s,可能和s一起出现频率最高的就是t,e..... 想知道算法!!!如果可以,可以给个代码作为参考吗?非常谢谢 解决方案 没问题,采纳了就写给你. 解决方案二: 求一篇英文文章中各个字母出现的频率,不区分大小写. 思路: (1)首先定义一个数组freArray= new int[26],存放每个单词的出现频率. (2)读

c语言-编程算法 - 最小的k个数 代码(C)

问题描述 编程算法 - 最小的k个数 代码(C) 请解释一下在c语言中怎样编写在输入的N个数中找到k个最小的数 解决方案 排序吧,再输出前k个数 解决方案二: 遍历,找出MAX,移除MAX,循环K遍 解决方案三: 我觉得你的问题是怎么将输入的数保存下来,你可以先定义一个vector. vector vec;int iNUm = 0;while(cin>>iNum)//需要结束的时候输入ctrl+z;{ vec.push_back(iNum);}//最后对整个vec进行排序,取得最小的值 解决方

编程算法之硬币问题 代码(C)

题目: 有1, 5, 10, 50, 100, 500元硬币各若干枚, 现在要用这些硬币来支付A元, 最少需要多少枚硬币? 假定本题至少存在一种支付方案. 使用贪心算法, 优先选用最大的硬币, 并不断的调整硬币的数量. 代码: /* * main.cpp * * Created on: 2014.7.17 * Author: spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <limits.h> #inc

java-一个简单的小算法求助

问题描述 一个简单的小算法求助 找出一个数组中既不是最大的数也不是最小的数,我的java代码如下(错误的): class NotMM{ public void NotMM(int arr[]){ int mid = arr[0]; for(int i=0;i<arr.length-2;i++){ if(arr[i+1]>arr[i]&&arr[i+1]<arr[i+2]){ mid = arr[i+1]; }else if(arr[i+1]<arr[i]&&

c++-做一个电话号码本,进行查找,添加等操作,不知道自己的代码哪里错了,求助~

问题描述 做一个电话号码本,进行查找,添加等操作,不知道自己的代码哪里错了,求助~ #include #include #define max 40 using namespace std; struct User/*电话薄结构*/ { char name[8]; char tel[11]; char add[20]; User next; }user; struct Node/哈希表结构*/ { User user; Node *next; }; int user_num; Node *has

十大编程算法助程序员走上大神之路

十大编程算法助程序员走上大神之路 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤:

地图api-webGL问题,地图多线合并算法求助!!!

问题描述 webGL问题,地图多线合并算法求助!!! 开发一个新的地图API,目前一个难题. 需要将多条不规律的线合并为一条,这些线可相交,可是折线,长短不一. 有过类似经验或者有想法的同僚来探讨一下吧

请求阻塞-ajax请求过多导致js代码阻塞问题,求助

问题描述 ajax请求过多导致js代码阻塞问题,求助 首先,我有这么一个需求. 需求:遍历局域网内所有IP查找服务器IP. 实现:通过for循环向每个IP发送ajax请求,前端成功接受到服务器返回的数据说明当前请求的IP为服务器IP地址. 问题:由于向局域网内所有IP都同时发送了ajax请求,一共250多次,导致js代码以及ajax请求阻塞. 有没有什么比较好的办法能够解决ajax请求不响应的问题.. 贴一下代码 for(var i = 0;i<ipUseableArray.length;i++

树-一道编程题,用c++编程,求助

问题描述 一道编程题,用c++编程,求助 给定一颗无根树,假设它有n个节点,节点编号从1到n,求任意两点之间的距离之和,也就是求任意一点到其它点的距离之和,边长都为1.要求时间复杂度为O(n) 解决方案 先做一遍DFS求出所有节点到根节点的距离之和,然后可以发现,如果知道到一个点的距离之和,可以用O(1)求出所有节点到它相邻点的距离之和 解决方案二: /* ***********************************************Author :xdloveCreated T