C语言中输入任意个数数字记录每个数字出现的次数
用C语言实现输入任意个数的数字,记录这些数字出现的次数。要求:
1、不能用数组进行记录输入的数字,而是通过while(cin>>i)这个语法输入数字。
疑问:有没有什么办法让缓存里面的数据进行循环遍历。 cin是个class,不是C语言的东西,C语言没有class,C++才有。 额,知道,只是免了麻烦就用C++的输入流而已 0xAA55 发表于 2015-9-9 08:52
cin是个class,不是C语言的东西,C语言没有class,C++才有。
额,知道。只是免了麻烦就用C++的输入函数,请问有什么思想可以解决这个问题吗 不能用数组可以用文件。直接用文件来存储数字和其次数即可。 算法请参考这里:
http://www.0xaa55.com/forum.php?mod=viewthread&tid=1281&extra= cyycoish 发表于 2015-9-14 02:20
算法请参考这里:
http://www.0xaa55.com/forum.php?mod=viewthread&tid=1281&extra=
谢谢你的参考,学习中!!!!! 帮你写好了,没有用到任何数组,除了该死的指针操作使用C的stdlib库,完全面向对象:
算法思想曾经发过链接,实测有效,你来使用一下:
#include <iostream>
#include <stdlib.h>
#define _INP_
#define _OUP_
#define _UMR_
#define DECLARE__
using namespace std;
typedef struct
{
int source;
int times;
}HIPPO;
class Hippocampus
{
public:
int ctr; //索引
HIPPO* hippo = NULL; //海马体
DECLARE__ ~Hippocampus( //析构函数
_UMR_ void
);
DECLARE__ void CheckItems( //检查记忆
_INP_ const int num//要检查的数字
);
DECLARE__ void PrintReport( //打印结果
_UMR_ void //没有参数
);
};
int main()
{
Hippocampus *hippocampus = new Hippocampus();
int i;
while (cin >> i)
{
hippocampus->CheckItems(i);
//显示结果
cout << "\t输入完毕,结果如下:" << endl;
hippocampus->PrintReport();
}
//释放资源
delete hippocampus;
}
void Hippocampus::CheckItems(
_INP_ const int num
)
{
int k, j;
//海马体空
if (hippo == NULL)
{
//初始化索引
ctr = 1;
//申请内存
hippo = (HIPPO*)malloc(sizeof(HIPPO));
//添加记忆
hippo->source = num;
hippo->times = 1;
return;
}
//遍历,指针已经位于开始
bool bFinded = true;
for (k = 0; k < ctr; k++, hippo++)
{
if (num == hippo->source) //找到记忆
{
//次数+1
hippo->times++;
//跳出循环
break;
}
else
bFinded = false;
}
//指针指向开始
for (j = k; j > 0; j--, hippo--);
//没有记忆
if (!bFinded)
{
//长度加一
ctr++;
hippo = (HIPPO*)realloc(hippo, ctr * sizeof(HIPPO));
//指针指向末尾
for (j = 0; j < ctr - 1; j++, hippo++);
//添加记忆
hippo->source = num;
hippo->times = 1;
//指针恢复开始
for (j = 0; j < ctr - 1; j++, hippo--);
}
return;
}
void Hippocampus::PrintReport(
void
)
{
int k, j;
//遍历打印
for (k = 0; k < ctr; k++, hippo++)
{
cout << "\t数字::" << hippo->source << ",";
cout << "\t频率::" << hippo->times << endl;
}
//恢复指针指向开始
for (j = k; j > 0; j--, hippo--);
}
Hippocampus::~Hippocampus( //析构函数
void
)
{
//释放资源
free(hippo);
hippo = NULL;
} cyycoish 发表于 2015-9-18 02:20
帮你写好了,没有用到任何数组,除了该死的指针操作使用C的stdlib库,完全面向对象:
算法思想曾经发过链接 ...
这是C和C艹的混合语言,并不推荐这么写。C语言正是因为没有class我才用它的。
页:
[1]