第十四章:提取出某日访问百度次数最多的那个IP

2024-02-01 05:18

本文主要是介绍第十四章:提取出某日访问百度次数最多的那个IP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提取出某日访问百度次数最多的那个IP

问题描述:海量日志数据,提取出某日访问百度次数最多的那个IP。

分析:IP地址是32位的二进制数,所以共有N=2^32=4G个不同的IP地址, 创建一个unsigned count[N];的数组,即可统计出每个IP的访问次数

#include <fstream>  
#include <iostream>  
#include <ctime>  using namespace std;  
#define N 32           //临时文件数  #define ID(x)  (x>>27)                 //x对应的文件编号  
#define VALUE(x) (x&0x07ffffff)        //x在文件中保存的值  
#define MAKE_IP(x,y)  ((x<<27)|y)      //由文件编号和值得到IP地址.  #define MEM_SIZE  128*1024*1024       //需分配内存的大小为 MEM_SIZE*sizeof(unsigned)     char* data_path="D:/test/ip.dat";        //ip数据  //产生n个随机IP地址  
void make_data(const int& n)         
{  ofstream out(data_path,ios::out|ios::binary);  srand((unsigned)(time(NULL)));  if (out)  {  for (int i=0; i<n; ++i)  {  unsigned val=unsigned(rand());           val = (val<<24)|val;              //产生unsigned类型的随机数  out.write((char *)&val,sizeof (unsigned));  }  }  out.close();
}  //找到访问次数最大的ip地址  
int main()  
{  //make_data(100);     //   make_data(100000000);       //产生测试用的IP数据  fstream arr[N];  for (int i=0; i<N; ++i)                 //创建N个临时文件  {  char tmp_path[128];     //临时文件路径  sprintf(tmp_path,"D:/test/tmp%d.dat",i);  arr[i].open(tmp_path, ios::trunc|ios::in|ios::out|ios::binary);  //打开第i个文件  if( !arr[i])  {  cout<<"open file"<<i<<"error"<<endl;  }  }  ifstream infile(data_path,ios::in|ios::binary);   //读入测试用的IP数据  unsigned data;  while(infile.read((char*)(&data), sizeof(data)))  {  unsigned val=VALUE(data);  int key=ID(data);  arr[ID(data)].write((char*)(&val), sizeof(val));           //保存到临时文件件中  }  for(unsigned i=0; i<N; ++i)  {  arr[i].seekg(0);  }  unsigned max_ip = 0;    //出现次数最多的ip地址  unsigned max_times = 0;     //最大只出现的次数  //分配512M内存,用于统计每个数出现的次数  unsigned *count = new unsigned[MEM_SIZE];    for (unsigned i=0; i<N; ++i)  {  memset(count, 0, sizeof(unsigned)*MEM_SIZE);  //统计每个临时文件件中不同数字出现的次数  unsigned data;  while(arr[i].read((char*)(&data), sizeof(unsigned)))       {  ++count[data];  }  //找出出现次数最多的IP地址  for(unsigned j=0; j<MEM_SIZE; ++j)                             {  if(max_times<count[j])             {  max_times = count[j];  max_ip = MAKE_IP(i,j);        // 恢复成原ip地址.  }  }  }  delete[] count;  unsigned char *result=(unsigned char *)(&max_ip);  printf("出现次数最多的IP为:%d.%d.%d.%d,共出现%d次\n",   result[0], result[1], result[2], result[3], max_times);  
}  



这篇关于第十四章:提取出某日访问百度次数最多的那个IP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666185

相关文章

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

详解如何使用Python提取视频文件中的音频

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择... 目录引言代码部分方法扩展引言在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom