- 博客(51)
- 收藏
- 关注
原创 QQ音乐听歌升级漏洞-用C实现接口
漏洞怎么发现的有一次,正在使用抓包工具Wireshark,换了收歌,看到Wireshark多了几条记录,看到域名i.y.qq.com,最后发现是QQ音乐的。出于好奇,我是想研究下我切歌的时候,QQ音乐到底是发了哪些数据包,没想到发现了QQ音乐发送听歌时间的一个漏洞分析协议因为用Wireshark可以看到,QQ音乐发送数据的时候采用的是HTTP协议,这里为了说明方便,用的是Fiddler2分析协议
2016-04-05 13:48:19 3418 3
原创 【内存泄露/C++】基于重载new运算符的内存泄露检测工具
···检测内存泄露的方法有很多,这里使用的是重载系统的new运算符和delete运算符。从而达到,在new的时候记录申请内存的大小,和代码所属文件和行号,后两个信息主要是为了调试。在程序结束之前,访问保存的这些信息,判断内存是否泄漏。 ···这里使用的存储结构是哈希表,结构如下:typedef struct MemNode//记录new时保存的信息{ int size; char
2015-09-02 10:20:12 937
原创 [Boost]用asio编写简单的socket通信程序
boost/asio库中封装了很多关于scoket的函数,当然,asio库还包含很多底层的库。我们可以用socket编写一个基于UDP协议的黑框通讯程序。要想使用asio里面的函数,大多都需要先创建一个io_service对象,然后通过这个serveice来构造不同的对象,所以第一步,我们得创建两个对象: boost::asio::io_service io_service; b
2015-08-27 10:54:53 6928
原创 一个循环实现冒泡法排序(并没有什么卵用)
冒泡法时间复杂度为O(n^2) 这个是改不了的 不可能因为用一个循环实现,就变成了O(N)。。。 所以,并没有什么卵用,只是一种写代码的方式而已。。。//Swap 用宏实现#define Swap(a,b,c) ((c)=(a),(a)=(b),(b)=(c))//第一种方式,,,最简单的void BubbleSortOneLoop(int ar[], int n){ int i
2015-06-17 23:16:21 1746
原创 KMP算法解决字符串出现次数
比如主串为:”1001110110” 子串为:”11“ 则出现位置分别为:3 4 7//KMP算法 2015.6.7#include<iostream>#include<stdlib.h>using namespace std;int main(){ char *s = "1001110110"; char *p = "11"; int ar[20] = {
2015-06-15 22:11:02 2883 1
原创 [编程题]Be Unique (赌徒下注问题)
Being unique is so important to people on Mars that even their lottery is designed in a unique way. The rule of winning is simple: one bets on a number chosen from [1, 104 ]. The first one who bets on
2015-06-15 22:04:05 1229
原创 [编程题]Shuffling Machine (洗牌程序)
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid “inside jobs” where employees collaborate with gamblers
2015-06-15 22:02:33 3148
原创 [编程题]数字分类
给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和; A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…; A3 = 被5除后余2的数字的个数; A4 = 被5除后余3的数字的平均数,精确到小数点后1位; A5 = 被5除后余4的数字中最大数字。 输入描述:每个输入包含1个测试用例。每个测试用例先给出一个不
2015-06-15 21:58:02 1134
原创 矩阵的排序
在一个m*n矩阵中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,按从小到大的顺序打印这个矩阵到一个一维数组中。如图,则应打印出1,2,2,4,4,6,7,8,8,9,9,10,11,12,13,15.思路:如果把它想成 合并m个大小为n的数组,那么思路将会很简单。 但是,矩阵的m和n为随机值,所以并不能想很简单的那种合并。 假如我们定义一个大小为m
2015-05-05 19:10:42 12090
原创 单链表的sort以及resver的实现(改变链表指向而非数值)
单链表的sort排序采用冒泡法,不是单纯的改变链表结点的值,而是通过改变物理结构上的指针域指向实现。 void sort(List *list){ if(list->size <=1)` //基本条件 return ; Node *p,*q,*pa,*temp; for(int i=0;i<list->size-1;i++)//控制总次数 {
2015-05-04 12:58:37 1773
原创 【算法】最长回文子串的判断
描述:比如:“12212321”的最长回文子串为“12321”长度为5int LongestPalindrome(string s){ int max=0; if (s.length() >= 1) { for(int i=0;i<s.length();i++) //从左向右依次遍历 { int l; //如果这个子串长度为质数 for(l=
2015-04-26 13:33:10 764
原创 【字符串】字符串包含问题的最优解
题目描述 给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里? 为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B)比如,如果是下面两个字符串: String 1:ABCD String 2:BAD
2015-04-26 13:27:23 1082
原创 【字符串】大数的乘法(包括浮点数)
一.大数乘法我们知道,要运算两个数的乘法,c、c++语言里有专门的运算符*。但是当两个数超过一定的范围时,用普通的运算符会产生溢出,并不能得到正确的结果。如何进行运算呢? 首先,要想保存一个大数,用正常的整形或浮点类型是不够的。所以我们可以采用字符串的形式对大数进行保存,然后编写算法,模拟乘法运算过程即可。1.第一个问题:两个数字运算结果至多用多少位的字符串保存呢?两个4
2015-04-22 11:21:23 6449
原创 【算法】字符串左移函数的O(n)解法
例如,字符串 abcdef ,若要让def翻转到abc的前头,只要按照下述3个步骤操作即可: 首先将原字符串分为两个部分,即X:abc,Y:def; 将X反转,X->X^T,即得:abc->cba;将Y反转,Y->Y^T,即得:def->fed。 反转上述步骤得到的结果字符串X^TY^T,即反转字符串cbafed的两部分(cba和fed)给予反转,cbafed得到defabc,形式化表示为
2015-04-13 12:55:01 1142
原创 【算法】合并排序
#include #include void mergePass(int *ar,int *pr,int s,int size);void merge(int *ar,int *pr,int l,int m,int r);void mergeSort(int *ar,int size) // 合并排序{ int *pr=(int *)malloc(sizeof(int)*
2015-04-11 20:11:56 826
原创 【剑指offer】替换空格
字符串:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy代码实现:#includechar *replaceSpace(char *str){ char ar[100]={0}; char *pstr=str; char *par=ar; while
2015-04-11 11:52:45 554
原创 【剑指offer】变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。与跳台阶不同的地方在于,加入n=5,那么这次 青蛙可以一次性跳3层,或4层,或5层。代码实现:class Solution {public: int jumpFloorII(int number) { int sum=0;
2015-04-11 11:50:40 623
原创 【剑指offer】跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。代码实现:class Solution {public: int jumpFloor(int number) { if(number<=1) return 1; else return jumpF
2015-04-11 11:47:10 558
原创 【递归】棋盘覆盖
问题描述:在一个2^k*2^k 的方格组成的棋盘中,有一个方格与其他方格不同,称为特殊方格。现在邀请4中不同的L型骨牌 覆盖给定的棋盘除特殊方格外的所有方格。例如:这是一个K=2时的棋盘,特殊点坐标为(0,1)。四中L型骨牌如图:程序代码:#include #define KEY 8 //棋盘的阶数int ar[KEY][KEY]=
2015-04-11 11:43:16 763
原创 【C语言】函数参数中的const修饰符
通常,字符串操作函数原型中,都会在形参前面加上const修饰符,表示此指针不能用于修改字符串的值 比如:char *strcpy(char *strDest, const char *strSrc) 但是可不可以通过 在函数里定义一个指针指向strSrc,来改掉字符串的值呢?给出以下代码:#include #includevoid fuc(const char *p){
2015-03-17 12:47:35 7452
原创 【C语言】reverse_string(char * string)(递归实现)
递归实现reverse_string(char * string)函数。翻转 原来的字符串是改变 不是打印出来。/*编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。*/#include void reverse_string(char * string
2015-03-14 16:34:01 1249
原创 【C语言】递归函数DigitSum(n)
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,//例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19#include int fuc(int x){ if(x!=0) return x%10+(fuc(x/10)); return 0;}int main(){ printf("%d\n",fuc(2138
2015-03-14 16:29:46 877
原创 【C语言】编写一个函数实现n^k,使用递归实现
#include int fuc(int x,int n){ if(n!=1) return x*fuc(x,n-1); return 1; }int main(){ printf("%d\n",fuc(3,4)); return 0;}
2015-03-14 16:29:06 1008
原创 【C语言】最大公约数(更相减损法)和(辗转相除法)
#include#include /* 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4*///更相减损法int fuc(int m,int n){ int i=0,temp,x; while(m%2==0 && n%2==0) //判断m和n能被多
2015-03-10 22:59:44 5291
原创 【C语言】编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)
/* 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)例如:"12" 返回12"-123" 返回-123函数原型:int my_atof(char *str)*/#include int my_atof(char *str){ int flag=0; int m=0; if(*str=='-') { flag=1; str++;
2015-03-10 22:57:25 13359 1
原创 【C语言】将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
#include /*编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)例如:"12.34" 返回12.34"-123.34" 返回-123.34函数原型:double my_atof(char *str){}*/double my_atof(char *str){ double m=0,n=0,x=1; int flag=1; in
2015-03-10 22:56:48 3570
原创 【C语言】数字的字符串转化为 数字
#include /*这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零。*/int ascii_to_integer(char *str){int i=0;while(*str!='\0'){if(*str'9')return 0;i*=10;
2015-03-10 22:54:45 2456
原创 【C语言】厄密多项式
#include/* 厄密多项式*/int hermite(int n, int x){ if(n<=0) return 1; else if(n==1) return 2*x; else if(n>=2) return 2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);}int main(){ int n,x; puts
2015-03-10 22:51:53 765
原创 【数据结构】链式队列
//linkqueue.h#include "stdio.h"#include "stdlib.h"#include #define MAXSZIE 30struct qNode{ char name[MAXSZIE];char author[MAXSZIE];int Pages;double Price;char IsForeign;struct qNode * next;
2015-02-10 14:41:23 645
原创 【数据结构】顺序队列
#include #include #define MAX_DATA 10typedef struct seqQueue{ int data[MAX_DATA]; int front,rear;}seqqueue;void InitQueue(seqqueue *sq){ sq->front=0; sq->rear=0;}int Empty(seqqueue sq
2015-02-10 14:36:26 625
原创 【数据结构】链式栈
#include #include typedef struct LinkStack{ int info; struct LinkStack *next;}StackNode;typedef struct LinkTop { struct LinkStack *Top;}LinkTop;LinkTop* creat_Stack(void){ LinkTop *
2015-02-10 14:33:14 656
原创 【数据结构】顺序栈
#include #include #include typedef struct SeqStack{ int length; int top; char *data;}seqstack;seqstack* CreatStack(seqstack *s,int n){ s=(seqstack *)malloc(sizeof(seqstack)+n*sizeof(char))
2015-02-10 14:32:09 844
原创 【数据结构】单链表
#include #include #include typedef struct LinkNode{ int date; //数据域 struct LinkNode * next;}linkNode;typedef struct Linklist{ int length; linkNode *head;}linklist;linklist *Creat
2015-01-18 21:38:19 387
原创 【数据结构】顺序表seqlist
#include #include #include typedef struct seqlistNode{ int date;}seqlistNode;typedef struct SEQLIST{ unsigned int lengh; //长度 unsigned int count; //已存元素长度 seqlistNode * date; //数据
2015-01-18 14:10:46 1977
原创 【数据结构】哈夫曼树实现编码译码
根据一段字符串中字符的个数 作为该字符的权值生成哈夫曼树。 然后根据生成的哈夫曼编码,对任意字符串实现编码,对任意二进制串实现译码。程序运行结果:1.程序主界面:2.根据字符串 创建哈夫曼树及编码:3.生成的编码表如下:4.根据生成的哈夫曼编码对字符串编码:5.生成的编码保存在文件中:6.对二进制串译码
2015-01-07 22:16:13 21255 10
原创 【c语言】实现翻转字符串函数reverse_string
函数reverse_string(char * string)实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。#include #include#define SWAP(a,b,c) ((c)=(a),(a)=(b),(b)=(c))void reverse_string(char * s){ char *p=s; char t
2015-01-07 22:14:12 8351
原创 【c语言】实现Strcat函数
实现char * my_strcat(char * dest,char *src)函数.返回: dest字符串的地址。功能:将src指向的字符串追加到dest指向字符串的后面。例如:char dest[10] = "andef";char *src = "ghi";my_strcat();之后,dest指向的字符串为"andefghi".代码:#in
2015-01-07 22:05:11 6786
原创 【C语言】二分查找法
两种写法:循环:int fuc(int *s,int x,int max){ int left=0; int right=max-1; int mid; while(left<=right) { mid=(right+left)/2; if(s[mid]>x) right=mid-1; else if(s[mid]<x) left=mid+1; e
2014-12-28 19:01:17 571
原创 【C语言】逆转二进制数的几种方法
比如输入10(1010)输出 5(101)代码有三种:最笨的方法循环:int fuc(int x){ int count=0; int num=0; int n=x; while(n!=0) { n/=2; count++; } while(x!=0) { if(x%2==1) num+=(int)pow(2,count-1); x/=
2014-12-28 18:59:01 2245 1
原创 【C语言】9的个数
输出100以内 9的个数。循环写法:int fuc2(){ int num=1; int x,count=0; while(num<100) { x=num; while(x!=0) { if(x%10==9) count++; x=x/10; } num++; }return count;}递归写法:int fuc(int
2014-12-28 18:55:20 1567
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人