首页
动态
文章归档
友情链接
留言簿
关于
订阅测试
推荐
统计
朋友圈集赞
二维码生成
高中笔记
Search
1
全网首发-小米AX6000路由器解锁ssh并固化ssh+2.5G有线mesh组网+公网访问路由后台+红米AX6/小米AX6/AX3600/AX6000/AX9000全系列适用
6,742 阅读
2
青龙面板必装依赖及青龙各种问题解决
3,910 阅读
3
NAS一键批量清除重复文件
3,506 阅读
4
群辉DSM7.0.1安装bootstrap后解决wget: error while loading shared libraries: libgnuintl.so.8: cannot open shared object file: No such file or directory
1,578 阅读
5
《爱情公寓4》全集高清迅雷下载
886 阅读
闲言碎语
学习
福利
技术百科
WordPress
Typecho
软件资源
iPhone
Android
PC软件
CODE
C
VB
PHP
NAS
青龙
登录
Search
标签搜索
wordpress
News
iphone
Typecho
vb
iOS
technology
渗透
QQ
php
NAS
talk
JavaScript
hack
福利
c++
diy
c
英语
免杀
Jonty
累计撰写
289
篇文章
累计收到
990
条评论
今日撰写
0
篇文章
首页
栏目
闲言碎语
学习
福利
技术百科
WordPress
Typecho
软件资源
iPhone
Android
PC软件
CODE
C
VB
PHP
NAS
青龙
页面
动态
文章归档
友情链接
留言簿
关于
订阅测试
推荐
统计
朋友圈集赞
二维码生成
高中笔记
用户登录
登录
搜索到
35
篇与
CODE
的结果
2017-05-11
c自带qsort函数用法
qsort函数用法功 能: 使用快速排序例程进行排序用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针用于确定排序的顺序 排序方法有很多种, 选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序 是目前公认的一种比较好的排序算法(我没听书速度比这快的了,特殊场合例外),比选择排序,冒泡排序都要快。这是因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort。qsort 要求提供一个 比较函数,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字 ,比如有一个结构 struct num { int a; int b; }; 然后我有一个num 类型的数组, num dddd[100]; 我想给 dddd这个数组排序,那怎么办? 我想让 a +b 最大的num元素排在数组的最前面,那又怎么办? 这都可以通过定义比较函数来做到的。 比较函数的作用就是给qsort指明 元素的大小是怎么比较的。 像这样的比较函数 inline int MyCmp(const void* a, const void* b) 都是有两个元素 作为参数,返回一个int 值, 如果 比较函数返回大于0,qsort就认为 a>b , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 ab),你比较函数却返回一个 -1 (小于零的)那么qsort认为a<本文中排序都是采用的从小到大排序>一、对int类型数组排序int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp);二、对char类型数组排序(同int类型)char word[100]; Sample: int cmp( const void *a , const void *b ) { return *(char *)a - *(int *)b; } qsort(word,100,sizeof(word[0]),cmp);三、对double类型数组排序(特别要注意)double in[100]; int cmp( const void *a , const void *b ) { return *(double *)a > *(double *)b ? 1 : -1; } qsort(in,100,sizeof(in[0]),cmp); 四、对结构体一级排序struct In { double data; int other; }s[100] //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种, //参考上面的例子写 int cmp( const void *a ,const void *b) { return (*(In *)a).data > (*(In *)b).data ? 1 : -1; } qsort(s,100,sizeof(s[0]),cmp); 五、对结构体二级排序struct In { int x; int y; }s[100]; //按照x从小到大排序,当x相等时按照y从大到小排序 int cmp( const void *a , const void *b ) { struct In *c = (In *)a; struct In *d = (In *)b; if(c->x != d->x) return c->x - d->x; else return d->y - c->y; } qsort(s,100,sizeof(s[0]),cmp); 六、对字符串进行排序struct In { int data; char str[100]; }s[100]; //按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ) { return strcmp( (*(In *)a)-&gt;str , (*(In *)b)-&gt;str ); } qsort(s,100,sizeof(s[0]),cmp); 七、计算几何中求凸包的cmpint cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序 { struct point *c=(point *)a; struct point *d=(point *)b; if( calc(*c,*d,p[1]) &lt; 0) return 1; else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面 return 1; else return -1; } PS: 其中的qsort函数包含在的头文件里,strcmp包含在的头文件里 出处:syxChina {lamp/}以下自写的:test.c#include <stdio.h> #include <stdlib.h> int cmp(const void *a ,const void *b) { return *(int *)a - *(int *)b ; //从小到大排序,把a,b位置反过来就是从大到小 } int main() { int a[10]={-1,9,5,7,-11,2,6,8,9,6},i; qsort(a,10,sizeof(int),cmp); for(i = 0 ; i < 10 ; ++i) { printf("%d ",a[i]); } printf("\n") ; return 0 ; } 整型数组排序.cpp#include<iostream> #include<algorithm> using namespace std; struct node { int a; int b; double c; }; bool cmp(node x,node y) { if(x.a!=y.a) return x.a<y.a; if(x.b!=y.b) return x.b>y.b; return x.c>y.c; } int main() { struct node arr[5]={{2,1,1.2},{5,2,2.1},{6,1,3.1},{3,4,2.1},{3,2,2.4}}; int i; cout<<"排序前:"<<endl; for(i=0;i<5;i++) { cout<<arr[i].a<<"\t"<<arr[i].b<<"\t"<<arr[i].c<<"\t"; cout<<endl; } cout<<"排序后:"<<endl; sort(arr,arr+5,cmp); for(i=0;i<5;i++) { cout<<arr[i].a<<"\t"<<arr[i].b<<"\t"<<arr[i].c<<"\t"; cout<<endl; } }
2017年05月11日
100 阅读
0 评论
0 点赞
2017-02-23
蓝桥杯:基础练习 十六进制转八进制
基础练习 十六进制转八进制问题描述: 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式: 输入的第一行为一个正整数n (1<=n<=10)。接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式: 输出n行,每行为输入对应的八进制正整数。 注意: 输入的十六进制数不会有前导0,比如012A。输出的八进制数也不能有前导0。 时间限制: 1.0s 内存限制: 512.0MB 样例输入:2 39 123ABC样例输出:71 4435274提示: 先将十六进制数转换成某进制数,再由某进制数转换成八进制。算法分析:这个题目,我们要看到 "每个十六进制数长度不超过100000" 这句话。注意是100000位,不是<100000;我们这里主要思想是先将十六进制转化为二进制(每4位二进制对应1位十六进制),然后将二进制转化为八进制(每3位二进制对应1位八进制)。如:十六进制 A1 二进制 1010 0001 八进制 (010 100 001)241C语言实现如下:①采用gets输入时,需要处理%d在输入流中留下的回车;②合理定义数组大小,其中十六进制位数与二进制是4倍关系,与八进制是4/3关系;③使用strcat拼接字符串时注意,为了加快速度,需采用下文中方式,否则会超时(避免每次都从字符串首部查找’\0’);④对于所得二进制可能不为3的整数倍时,01,101,110,101…..,这里采用取余法将01单独处理,后面整体处理;⑤由于采用了while(scanf(”)!=EOF)输入形式,注意每次对尾部进行截断,避免对下次计算造成影响;⑥以下程序采用纯C语言编写。#include <stdio.h> #include <string.h> #include <math.h> char Hex[10][100001]; // 十六进制 char Oct[10][150000]; // 八进制 将列数扩大4/3倍以上 char Bin[10][400004]; // 二进制 将列数扩大为4倍以上 //十六进制转二进制 void Hex2Bin(int row) { int hexcol=0, bincol=0; Bin[row][0] = '\0'; //strcat 识别'\0' while (Hex[row][hexcol] != '\0') { switch (Hex[row][hexcol]) {//&Bin[row][bincol] 比直接使用Bin[row]速度快,避免从头查找'\0' case '0': strcat(&Bin[row][bincol],"0000"); break; case '1': strcat(&Bin[row][bincol],"0001"); break; case '2': strcat(&Bin[row][bincol],"0010"); break; case '3': strcat(&Bin[row][bincol],"0011"); break; case '4': strcat(&Bin[row][bincol],"0100"); break; case '5': strcat(&Bin[row][bincol],"0101"); break; case '6': strcat(&Bin[row][bincol],"0110"); break; case '7': strcat(&Bin[row][bincol],"0111"); break; case '8': strcat(&Bin[row][bincol],"1000"); break; case '9': strcat(&Bin[row][bincol],"1001"); break; case 'A': strcat(&Bin[row][bincol],"1010"); break; case 'B': strcat(&Bin[row][bincol],"1011"); break; case 'C': strcat(&Bin[row][bincol],"1100"); break; case 'D': strcat(&Bin[row][bincol],"1101"); break; case 'E': strcat(&Bin[row][bincol],"1110"); break; case 'F': strcat(&Bin[row][bincol],"1111"); break; } ++hexcol; bincol += 4; } // puts(Bin[row]); } //二进制转八进制 void Bin2Oct(int row) { int bincol,octcol=0,mod,num,curcol=0,flag=0; //curcol 表示当前扫描到二进制位置 //flag用来标记首部是否已经出现了非0元素 bincol = strlen(Bin[row]); mod = bincol % 3; // 解决01, 101,110,011...问题, //划分为2部分分别计算 //01------101,110,011 //单独计算01 num = 0; while (--mod >= 0) { if (Bin[row][curcol++] == '1') num += (int)pow(2,mod); } //跳过首部0 if (num != 0) { Oct[row][octcol++] = '0'+num; //转数字为字符 flag = 1; //标记第一个不为0位置 } //计算101,110,011... while (Bin[row][curcol] != '\0') { mod = 3; num = 0; //每3位一计算,2^2=4, 2^1=2, 2^0=1 while (--mod >= 0) { if (Bin[row][curcol++] == '1') num += (int)pow(2,mod); } //跳过首部0 if (num != 0 || flag == 1) { Oct[row][octcol++] = '0'+num; //转数字为字符 flag = 1; } } //将尾部截断 Oct[row][octcol] = '\0'; } //十六进制转八进制 void Hex2Oct(int n) { int row; for (row = 0; row < n; ++row) { Hex2Bin(row); // 16->2 Bin2Oct(row); // 2->8 } } int main(void) { int row,n; while (scanf("%d",&n) != EOF) { getchar(); //消除输入流——回车误差 for (row = 0; row < n; ++row) { gets(Hex[row]); } //十六进制转八进制 Hex2Oct(n); //打印 for (row = 0; row < n; ++row) { puts(Oct[row]); } } return 0; }
2017年02月23日
58 阅读
0 评论
0 点赞
2016-09-30
《前方高能》教程来了。。
一、首先:在style.css添加如下代码:/*high起来*/ .btn-link{border-radius:0;color:#428BCA;cursor:pointer;font-weight:normal;}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:rgba(0,0,0,0);box-shadow:none;}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:rgba(0,0,0,0);}.btn-link:hover,.btn-link:focus{background-color:rgba(0,0,0,0);color:#2A6496;text-decoration:none;}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none;}}二、把下面代码保存到hi.css放到主题目录css下(如果没有自己建一个目录).mw-strobe_light{position:fixed;width:100%;height:100%;top:0;left:0;z-index:100000;background-color:rgba(250,250,250,0.8);display:block;}.mw-harlem_shake_me{transition:all 0.8s ease-in-out;-moz-transition:all 0.8s ease-in-out;-webkit-transition:all 0.8s ease-in-out;-o-transition:all 0.8s ease-in-out;-ms-transition:all 0.8s ease-in-out;animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;-webkit-animation:spin 1s infinite linear;-o-animation:spin 1s infinite linear;-ms-animation:spin 1s infinite linear;}.mw-harlem_shake_slow{transition:all 3.2s ease-in-out;-moz-transition:all 3.2s ease-in-out;-webkit-transition:all 3.2s ease-in-out;-o-transition:all 3.2s ease-in-out;-ms-transition:all 3.2s ease-in-out;animation:spin 4s infinite linear;-moz-animation:spin 4s infinite linear;-webkit-animation:spin 4s infinite linear;-o-animation:spin 4s infinite linear;-ms-animation:spin 4s infinite linear;}body{-webkit-backface-visibility:hidden;}.mw-harlem_shake_me{-webkit-animation-duration:.4s;-moz-animation-duration:.4s;-o-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;}.mw-harlem_shake_slow{-webkit-animation-duration:1.6s;-moz-animation-duration:1.6s;-o-animation-duration:1.6s;animation-duration:1.6s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;}.flash,.mw-strobe_light{-webkit-animation-name:flash;-moz-animation-name:flash;-o-animation-name:flash;animation-name:flash;}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);}20%,40%,60%,80%{-webkit-transform:translateX(10px);}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0);}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px);}20%,40%,60%,80%{-moz-transform:translateX(10px);}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0);}10%,30%,50%,70%,90%{-o-transform:translateX(-10px);}20%,40%,60%,80%{-o-transform:translateX(10px);}}@keyframes shake{0%,100%{transform:translateX(0);}10%,30%,50%,70%,90%{transform:translateX(-10px);}20%,40%,60%,80%{transform:translateX(10px);}}.shake,.im_baked{-webkit-animation-name:shake;-moz-animation-name:shake;-o-animation-name:shake;animation-name:shake;}.swing,.im_drunk{-webkit-transform-origin:top center;-moz-transform-origin:top center;-o-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;-moz-animation-name:swing;-o-animation-name:swing;animation-name:swing;}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%);}15%{-webkit-transform:translateX(-15%) rotate(-4deg);}30%{-webkit-transform:translateX(12%) rotate(3deg);}45%{-webkit-transform:translateX(-9%) rotate(-2deg);}60%{-webkit-transform:translateX(6%) rotate(2deg);}75%{-webkit-transform:translateX(-3%) rotate(-1deg);}100%{-webkit-transform:translateX(0%);}}@-moz-keyframes wobble{0%{-moz-transform:translateX(0%);}15%{-moz-transform:translateX(-15%) rotate(-5deg);}30%{-moz-transform:translateX(12%) rotate(3deg);}45%{-moz-transform:translateX(-9%) rotate(-3deg);}60%{-moz-transform:translateX(6%) rotate(2deg);}75%{-moz-transform:translateX(-3%) rotate(-1deg);}100%{-moz-transform:translateX(0%);}}@-o-keyframes wobble{0%{-o-transform:translateX(0%);}15%{-o-transform:translateX(-15%) rotate(-5deg);}30%{-o-transform:translateX(12%) rotate(3deg);}45%{-o-transform:translateX(-9%) rotate(-3deg);}60%{-o-transform:translateX(6%) rotate(2deg);}75%{-o-transform:translateX(-3%) rotate(-1deg);}100%{-o-transform:translateX(0%);}}@keyframes wobble{0%{transform:translateX(0%);}` 15%{transform:translateX(-15%) rotate(-5deg);}30%{transform:translateX(12%) rotate(3deg);}45%{transform:translateX(-9%) rotate(-3deg);}60%{transform:translateX(6%) rotate(2deg);}75%{transform:translateX(-3%) rotate(-1deg);}100%{transform:translateX(0%);}}.wobble,.im_first{-webkit-animation-name:wobble;-moz-animation-name:wobble;-o-animation-name:wobble;animation-name:wobble;}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);}50%{-webkit-transform:scale(1.1);}100%{-webkit-transform:scale(1);}}@-moz-keyframes pulse{0%{-moz-transform:scale(1);}50%{-moz-transform:scale(1.1);}100%{-moz-transform:scale(1);}}@-o-keyframes pulse{0%{-o-transform:scale(1);}50%{-o-transform:scale(1.1);}100%{-o-transform:scale(1);}}@keyframes pulse{0%{transform:scale(1);}50%{transform:scale(1.1);}100%{transform:scale(1);}}.pulse,.im_blown{-webkit-animation-name:pulse;-moz-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse;}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);}50%{opacity:1;-webkit-transform:scale(1.05);}70%{-webkit-transform:scale(.9);}100%{-webkit-transform:scale(1);}}@-moz-keyframes bounceIn{0%{opacity:0;-moz-transform:scale(.3);}50%{opacity:1;-moz-transform:scale(1.05);}70%{-moz-transform:scale(.9);}100%{-moz-transform:scale(1);}}@-o-keyframes bounceIn{0%{opacity:0;-o-transform:scale(.3);}50%{opacity:1;-o-transform:scale(1.05);}70%{-o-transform:scale(.9);}100%{-o-transform:scale(1);}}@keyframes bounceIn{0%{opacity:0;transform:scale(.3);}50%{opacity:1;transform:scale(1.05);}70%{transform:scale(.9);}100%{transform:scale(1);}}.bounceIn,.im_trippin{-webkit-animation-name:bounceIn;-moz-animation-name:bounceIn;-o-animation-name:bounceIn;animation-name:bounceIn;}三、把下面代码复制到js/hi.js(如果没有目录自己建一个|注意代码中mp3和css路径)function hig() { (function() { function c() { var e = document.createElement("link"); e.setAttribute("type", "text/css"); e.setAttribute("rel", "stylesheet"); e.setAttribute("href", f); e.setAttribute("class", l); document.body.appendChild(e) } function h() { var e = document.getElementsByClassName(l); for (var t = 0; t < e.length; t++) { document.body.removeChild(e[t]) } } function p() { var e = document.createElement("div"); e.setAttribute("class", a); document.body.appendChild(e); setTimeout(function() { document.body.removeChild(e) }, 100) } function d(e) { return { height: e.offsetHeight, width: e.offsetWidth } } function v(i) { var s = d(i); return s.height > e && s.height < n && s.width > t && s.width < r } function m(e) { var t = e; var n = 0; while ( !! t) { n += t.offsetTop; t = t.offsetParent } return n } function g() { var e = document.documentElement; if ( !! window.innerWidth) { return window.innerHeight } else if (e && !isNaN(e.clientHeight)) { return e.clientHeight } return 0 } function y() { if (window.pageYOffset) { return window.pageYOffset } return Math.max(document.documentElement.scrollTop, document.body.scrollTop) } function E(e) { var t = m(e); return t >= w && t <= b + w } function S() { var e = document.createElement("audio"); e.setAttribute("class", l); e.src = i; e.loop = false; e.addEventListener("canplay", function() { setTimeout(function() { x(k) }, 500); setTimeout(function() { N(); p(); for (var e = 0; e < O.length; e++) { T(O[e]) } }, 15500) }, true); e.addEventListener("ended", function() { N(); h() }, true); e.innerHTML = " <p>If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser.</p> <p>"; document.body.appendChild(e); e.play() } function x(e) { e.className += " " + s + " " + o } function T(e) { e.className += " " + s + " " + u[Math.floor(Math.random() * u.length)] } function N() { var e = document.getElementsByClassName(s); var t = new RegExp("\\b" + s + "\\b"); for (var n = 0; n < e.length;) { e[n].className = e[n].className.replace(t, "") } } var e = 1; var t = 1; var n = 1100; var r = 1100; var i = "http://7j1wr2.com1.z0.glb.clouddn.com/high.mp3"; var s = "mw-harlem_shake_me"; var o = "im_first"; var u = ["im_drunk", "im_baked", "im_trippin", "im_blown"]; var a = "mw-strobe_light"; var f = "https://cdn.nobb.cc/hi/hi.css"; var l = "mw_added_css"; var b = g(); var w = y(); var C = document.getElementsByTagName("*"); var k = null; for (var L = 0; L < C.length; L++) { var A = C[L]; if (v(A)) { if (E(A)) { k = A; break } } } if (A === null) { console.warn("Could not find a node of the right size. Please try a different page."); return } c(); S(); var O = []; for (var L = 0; L < C.length; L++) { var A = C[L]; if (v(A)) { O.push(A) } } })() }四、把下面代码加在主题footer.php里<script src="/js/hi.js"></script>五、主页加个按钮调用他<button type="button" class="btn btn-link" onclick="hig();">前方高能</button>六、演示{abtn icon="fa-certificate" color="#ff6800" href="javascript:void(0);" target="_self" onclick="hig();"content="点我开启高能"/} 文件打包下载:{cloud title="下载地址" type="bd" url="http://pan.baidu.com/s/1i5HMdN3" password="鸡8"/}
2016年09月30日
133 阅读
0 评论
0 点赞
2016-07-02
c代码-美国国防部机密文件销毁算法
当我们在系统里“删除”了一个文件时,并不意味着这个文件就一定从磁盘上清除了,很多优秀的文件恢复软件都可以恢复被删除的文件,这在一定程度上就带来了隐私泄露的隐患。好在现在很多软件,比如360、电脑管家等等软件都集成了文件粉碎的实用功能。今天介绍一种以前被用于美国国防部的机密文件销毁算法,并附上实现的代码(C)。算法介绍:美国国防部DOD5220.22M文件销毁标准包括以下三步:将文件先用0x00覆盖,再用0x01覆盖,如此重复三次;将文件用一个随机值覆盖;将文件名改为一个单字符文件名,最后删除之。算法可靠性验证:此算法虽然已经不再被美国国防部采用,但也足够应付一般的环境,主流文件恢复软件恢复的可能性还有待验证。/* * File Destroyer v 0.2.0 文件安全销毁 * * Copyright (C) 2015 Chaobs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * E-mail: chaobs@outlook.com * Blog: www.cnblogs.com/chaobs * * 用法: file-destroyer [filename1] <filename2>... * * 算法介绍: * 基于美国国防部DOD5220.22M标准进行文件销毁,包括以下三步: * (1)将文件先用0x00覆盖,再用0x01覆盖,如此重复三次; * (2)将文件用一个随机值覆盖; * (3)将文件名改为一个单字符文件名,最后删除之。 * * 算法可靠性验证: * 此算法虽然已经不再被美国国防部采用,但也足够应付一般的环境,对于主流文件恢复软件恢复的可能性还有待验证。 * * |-------------------------------------------------------------------------------------------| * | v 0.2.0更新: | * | (1)将原有的wipe()改为block_wipe(),block_wipe()采用成块的写入,可以提高程序运行效率。 | * | | * | v 0.1.0更新: | * | (1)修正了file_size()无返回值的问题(感谢网友冰尘醉); | * | (2)将file_zize()的调用移到了循环的外部。 | * |-------------------------------------------------------------------------------------------| */ #include <stdio.h> #include <stdlib.h> #include <time.h> void notice(int i, char *s); /* print short notice */ /* * v 0.2.0 的 blokc_wipe()一次写入一整块,保证了性能。 * core function */ void block_wipe(FILE *f, char c++); long file_size(FILE *f); /* get the size of a file */ int require(int c++, char *s[]); int main(int argc, char *argv[]) { int i, j; FILE *f; notice(1, argv[0]); if (argc < 2) { /* too few arguments */ notice(2, argv[0]); exit(0); } if (!require(argc, argv)) { fprintf(stderr, "Cancel Operating.\n"); exit(0); /* cancel */ } srand(time(NULL)); /* randomize */ for (i = 1; i < argc; ++i) { /* process each file */ if ((f = fopen(argv[i], "r+b")) == NULL) {/* fail to open file */ fprintf(stderr, "Error when open %s:\n", argv[i]); exit(0); } for (j = 0; j < 3; ++j) { /* DOD5220.22M Step 1 */ /* v 0.2.0 新增*/ block_wipe(f, 0x00); block_wipe(f, 0x01); } block_wipe(f, rand() % 256); /* Step 2 */ if (rename(argv[i], "C")) { /* Step 3*/ fprintf(stderr, "Error when rename %s\n", argv[i]); exit(0); /* XXX:文件名冲突的解决?可以考虑使用tmpnam()吗?*/ } remove("C"); /* XXX:如果是一个符号连接怎样保证删除的是真正的文件? */ fclose(f); } printf("Done! Destroy %d files\n", argc - 1); return 0; } /* implementation */ void notice(int i, char *s) { if (i == 1) { printf("\nFile Destroyer Copyright (C) 2015 Chaobs\n"); printf("This program comes with ABSOLUTELY NO WARRANTY.\n"); printf("This is free software, and you are welcome to redistribute under certain conditions.\n\n"); } else { fprintf(stderr, "Usage: %s [filename1] <filename2> ...\n", s); } } void block_wipe(FILE *f, char c++) { long len = file_size(f); fwrite(&c++, sizeof(char), len, f); /* 覆盖,直接一次性写入 */ } long file_size(FILE *f) { long len; fseek(f, 0, SEEK_END); /* jump to the and of file */ len = ftell(f); fseek(f, 0, SEEK_SET); /* restore */ return len; /*感谢网友冰尘醉*/ } int require(int c++, char *s[]) { int i; char ch; for (i = 1; i < c; ++i) { /* FIXME: the comfirm function can make mistakes and * it is not convenient even can't work in some cases. */ printf("Do you want to destroy %s ?(y/n) ", s[i]); ch = getchar(); getchar(); /* '\n' */ if (ch == 'n') return 0; } return 1; }dev c 5.1.1编译通过
2016年07月02日
80 阅读
0 评论
0 点赞
2016-06-15
C语言实现将字符串转换为数字的方法
本文实例讲述了C语言实现将字符串转换为数字的方法。分享给大家供大家参考。具体实现方法如下:C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)的数字。以下是用atoi()函数将字符串转换为整数的一个例子:#include <stdio.h> #include <stdlib.h> void main (void); void main (void) { int num; char * str = "100"; num = atoi(str); printf("The string 'str' is %s and the number 'num' is %d. \n",str, num); }atoi()函数只有一个参数,即要转换为数字的字符串。atoi()函数的返回值就是转换所得的整型值。下列函数可以将字符串转换为数字:{alert type="info"}函数名 作 用atof() 将字符串转换为双精度浮点型值atoi() 将字符串转换为整型值atol() 将字符串转换为长整型值strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字{/alert}将字符串转换为数字时可能会导致溢出,如果你使用的是strtoul()这样的函数,你就能检查这种溢出错误。请看下例:#include <stdio.h> #include <stdlib.h> #include <limits.h> void main(void); void main (void) { char* str = "1234567891011121314151617181920" ; unsigned long num; char * leftover; num = strtoul(str, &leftover, 10); printf("Original string: %s\n",str); printf("Converted number: %1u\n" , num); printf("Leftover characters: %s\n" , leftover); }在上例中,要转换的字符串太长,超出了无符号长整型值的取值范围,因此,strtoul()函数将返回ULONG_MAX(4294967295),并使。char leftover指向字符串中导致溢出的那部分字符;同时,strtoul()函数还将全局变量errno赋值为ERANGE,以通知函数的调用者发生了溢出错误。函数strtod()和strtol()处理溢出错误的方式和函数strtoul()完全相同,你可以从编译程序文档中进一步了解这三个函数的有关细节。
2016年06月15日
87 阅读
0 评论
0 点赞
2016-06-08
C语言学习推荐
建议初学者先买《C语言程序设计》作者为沈国荣的。该书我已经学完,书确实不错,很适合初学者学习。建议此书学透彻后再买基本参考书看看;推荐《C和指针》+《c陷阱与缺陷》+《C专家编程 》俗称C语言编程三剑客;以及《你必须知道的495个C语言问题》一书。建议学了就上机实战,有效消化~
2016年06月08日
109 阅读
0 评论
0 点赞
2014-06-22
VB安全密码框
{anote icon="fa-download" href="http://pan.baidu.com/s/14a8xw" type="success" content="下载地址"/}
2014年06月22日
79 阅读
0 评论
0 点赞
2014-06-12
VB雪花飘飘
代码如下: 添加一个timer和一个labelPrivate Sub Form_Load() Me.Caption = "雪花飘飘" Me.BackColor = RGB(100, 100, 255) Label1(0).AutoSize = True: Label1(0).BackStyle = 0 Label1(0).Caption = "*": Label1(0).ForeColor = &HFFFFFF Randomize For I = 0 To 40 If I > 0 Then Load Label1(I): Label1(I).Visible = True Label1(I).Move Me.ScaleWidth * Rnd, Me.ScaleHeight * Rnd Label1(I).Tag = Rnd * 7 - 3 & "|" & Rnd * 5 + 1 Label1(I).Font.Size = 5 + Rnd * 9 Next Label1(0).Font.Size = 9 Timer1.Enabled = True: Timer1.Interval = 50 End Sub Private Sub Timer1_Timer() Dim I As Long, S As Long, T As Single, L As Single Dim nTag As String, X As Single, y As Single, W As Single Randomize W = Label1(0).Height * 0.05 For I = 0 To Label1.Count - 1 nTag = Label1(I).Tag S = InStr(nTag, "|") X = Left(nTag, S - 1): y = Mid(nTag, S + 1) S = Int(Rnd * 10) If S = 0 Then X = Rnd * 11 - 5: Label1(I).Tag = X & "|" & y L = Label1(I).Left + X * W: T = Label1(I).Top + y * W If L < -Label1(I).Width Then L = Me.ScaleWidth If T < -Label1(I).Height Then T = Me.ScaleHeight If L > Me.ScaleWidth Then L = -Label1(I).Width If T > Me.ScaleHeight Then T = -Label1(I).Height Label1(I).Tag = Rnd * 11 - 5 & "|" & Rnd * 5 + 1 End If Label1(I).Move L, T Next End Sub
2014年06月12日
111 阅读
0 评论
0 点赞
2014-02-24
用Console.log防止开发者工具调戏
把下面这段代码添加到主题JS里,或者新建一个JS文件,把代码放进去,再加载这个JS文件。if(window.console&&window.console.log){ console.log(' _(:3」∠)_ 我只是一枚小白,求大神不要黑'); }如何查看? 在chrome里按下F12或右键审查元素,打开开发者工具,找到Console,或者按下Ctrl+Shift+J 在Safari里右键检查元素,打开开发者工具,找到控制台,或者按下Ctrl+Alt+C 在Firefox里按下F12或右键查看元素,打开开发者工具,找到控制台,或者按下Ctrl+Shift+K 现在,我们就能看到这货了,可能大家会问,怎么博主的右侧没有显示出所在位置呢? 是这样的,博主使用了ajax加载这段代码,所有就不会显示出具体所在位置。 这里我们需要用到jQuery的get(),博主是这样把代码载入进来的:var site = 'http://' + document.domain + '/wp-content/themes/BYMT/js/'; $.get(site+"dom-min.js");console对象还有其他4种显示信息的方法: console.info() 一般信息 console.debug() 日志信息 console.warn() 警告信息 console.error() 错误信息
2014年02月24日
63 阅读
1 评论
0 点赞
2014-01-17
无限弹窗
首先呢,是必不可少的css样式:.tc_div{background: #fff;border: 1px solid #cdcdcd;width: 200px;border-radius: 5px;box-shadow: 0px 2px 10px #CECACA;position: absolute;} .tc_div h3{background: #E4E4E4;font:bold 15px Arial,Microsoft Yahei;padding: 4px 8px;margin: 0;border-bottom: 1px solid #cdcdcd;border-radius: 5px 5px 0 0;} .tc_div h3 b{float: right;cursor: pointer;} .tc_div p{padding: 6px 8px;}接着是超文本标记语言HTML代码:我是无良弹窗君 ( *・ω・)✄ <a id="tc_click" style="text-decoration: underline;" href="###"> 敢戳我?分分钟弹死你!</a>最后,最重要的javascript代码来了:<script>// <![CDATA[ /* div弹出层 */ $(document).ready(function() { function doing(Min, Max, Time, Pl, Pt) { /* Min 最少弹出数 Max 最大弹出数 Time 延迟时间 Pl 距离左侧最大百分比 Pt 距离顶部最大百分比 */ if (isNaN(Min) || isNaN(Max) || isNaN(Time) || isNaN(Pl) || isNaN(Pt)) return false; /* 判断输入的是否是数字 */ run = setInterval(function() { if ((Min > Max - 1) && (Max != 0)) clearInterval(run); /* 如果超过最大弹出数则停止 Max为0则无限弹出 */ pl = parseInt(Math.random() * Pl + 1); /* 随机 1~Pl */ pt = parseInt(Math.random() * Pt + 1); /* 随机 1~Pt */ tc_div = ' <div id="tc_div_' + Min + '" class="tc_div"> <h3>小弹窗 No.' + Min + ' <b class="close">×</b></h3> 我是第' + Min + '个小弹窗 </div> '; $(".tc_main").append(tc_div); $("#tc_div_" + Min).css({left: pl + "%",top: pt + "%", "z-index": "100"}); Min++; /* 自增 */ }, Time); } /* 浏览器弹窗 */ function RunAlert() { var i, o, x, z = 10; /* z 弹出次数 */ if (confirm("(●′ω`●) 分分钟弹死你,你信不信?")) { /* 信则弹10*10*10次 不信再说 */ for (i = 1; i <= z; i++) { alert("(= ̄ω ̄=) 霸气第" + i + "弹"); for (o = 1; o <= z; o++) { alert("(= ̄ω ̄=) 霸气第" + i + "弹 \n(。・`ω´・) 骚气第" + o + "弹"); for (x = 1; x <= z; x++) { alert("(= ̄ω ̄=) 霸气第" + i + "弹 \n(。・`ω´・) 骚气第" + o + "弹 \n( ̄へ ̄) 合体第" + x + "弹"); } } } } else { alert("╮( ̄⊿ ̄\")╭ 切,量你也没这个胆子!"); if (confirm("(ง •̀ω•́)ง 试试新玩法?")) { /* 询问是否换个花样 */ $(".tc_main").empty(); doing(1, 0, 100, 85, 88); /* 每100毫秒弹一次 弹到屎 */ } else { alert("(′◔◞౪◟◔) 原来是个胆小鬼!一边玩去!"); return false; } } } $("#tc_click").click(function() { /* 敢点就敢弹 */ RunAlert(); }); $(".tc_main").click(function(e) { var id = e.target.offsetParent.id; $("#" + id).css("z-index", "+=1"); /* 堆叠层数+1 */ if (e.target.className == "close") { $("#" + id).remove(); /* 如果手速快 每个弹窗都可以关掉 */ } }) }) // ]]></script>
2014年01月17日
102 阅读
0 评论
0 点赞
2014-01-01
分享两个短链算法
1、Hash,与运算,映射,位移MD5来Hash;32位分成四份进行与运算,每份保留30位,这30位分成6段, 每5个一组,算出其整数值,然后映射到准备的62个字符中, 依次进行获得一个6位的短链接地址。<?php function shorturl($longurl) { //hash私钥(被改进部分) //$shorturlkey = '2rcwzfsefw'; //生成随机字串符(ASCII)(改进部分) //$shorturlkey = ''; //for ($i=0; $i <= 15; $i++) { // $shorturlkey .= chr(mt_rand(33,63)); // $shorturlkey .= chr(mt_rand(64,126)); //} //映射字符(被改进部分) $base62 = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); //对映射字符乱序(改进部分) //shuffle($base62); // 利用md5算法方式生成hash值 //$urlhex = hash('md5', $shorturlkey.$longurl); $urlhex = md5($shorturlkey.$longurl); //计算hash后的长度 $urlhexlen = strlen($urlhex); //长度除以8 $subHexLen = $urlhexlen / 8 ; $output = array(); //处理过程 for ($i = 0; $i < $subHexLen; $i++) { // 将这32位分成四份,每一份8个字符,将其视作16进制串与0x3fffffff(30位1)与操作 $subHex = substr($urlhex, $i*8, 8); $idx = 0x3FFFFFFF & (1 * ('0x' . $subHex)); $out = ''; // 这30位分成6段, 每5个一组,算出其整数值,然后映射到62个字符 for ($j = 0; $j < 6; $j++) { $val = 0x0000003D & $idx; $out .= $base62[$val]; $idx = $idx >> 5; } $output[$i] = $out; } //输出生成的四个当中的随机一个(改进部分) //return $output[mt_rand(0,3)]; //(被改进部分) return $output; } ?>不足经过实际测试(每次生成5K),原始代码重复率很大,一开始可能只有0.000x%,到后来可能上升到0x%。。。改进对映射的字符进行随机排位,最后输出的时候只随机输出4个当中的一个,碰撞几率同下2、纯随机 <?php function shorturl_rand(){ //循环随机,如果要修改位数,直接修改循环条件中的$i小于(n-1)即可 for ($i=0,$b=''; $i <5 ; $i++) { //随机当前位为数字还是小写字母以及大写字母 $a = mt_rand(0,2); //选择器 switch ($a) { case 0: //随机数字 $b .= chr(mt_rand(48,57)); break; case 1: //随机小写字母 $b .= chr(mt_rand(97,122)); break; case 2: //随机大写字母 $b .= chr(mt_rand(65,90)); break; break; default: break; } } return $b ; } ?>纯随机,碰撞几率最低,性能消耗可能是同类中最低。
2014年01月01日
94 阅读
1 评论
0 点赞
2013-11-30
VB蓝屏代码-超邪恶
添加一个timer如图代码:Dim ctCi As Long, ctT As Long, ctExitT As Long, ctStr() As String, ctStrS As Long, ctExit As Boolean Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Sub Form_Load() ctExitT = 12 '程序自动退出的时间(秒),可根据自己的喜好设定 Me.BackColor = RGB(0, 0, 255): Me.Caption = "蓝屏死机" Me.AutoRedraw = True: Me.WindowState = 2 Me.Font.Size = 21: Me.ForeColor = &HFFFFFF Timer1.Interval = 50: Timer1.Enabled = True ReDim ctStr(0 To 0) End Sub Private Sub Form_Click() If ctExit Then Unload Me End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) '单击左上角 20 个像素范围 Dim S1 As Single S1 = Me.ScaleX(20, 3, Me.ScaleMode) If X > S1 Or Y > S1 Then ctCi = 0: Exit Sub ctCi = ctCi + 1 If ctCi > 4 Then Call ExitInf End Sub Private Sub ExitInf() Timer1.Enabled = False: Me.WindowState = 0: ctCi = 0: ctExit = True Me.Move Screen.Width * 0.1, Screen.Height * 0.1, Screen.Width * 0.8, Screen.Height * 0.8 ctStrS = -1 AddStr "哈哈,一个玩笑" AddStr "结束本程序:单击蓝色区任意位置" Call ShowStr End Sub Private Sub Timer1_Timer() Static Ci As Long WinInTop Me.hWnd, True '始终将窗体保持在最前面,使用户无法使用开始菜单、任务管理器,无法操作任何程序 Ci = Ci + 1 If Ci * Timer1.Interval < 1000 Then Exit Sub '保证一秒钟计数一次 Ci = 0: ctExitT = ctExitT - 1: ctT = ctT + 1 If ctExitT < 1 Then Call ExitInf: Exit Sub Select Case ctT Case 1 ctStrS = -1 AddStr "Your Windows is died" Call ShowStr Case 5 ctStrS = -1 AddStr "Windows 警告" AddStr "内存出现严重错误" Call ShowStr Case 10 To 24 ctStrS = -1 AddStr "警告" AddStr "硬盘错误,无法正常运行 Windows" AddStr "Windows 正在试图修复所有错误" AddStr "请等待 " & ctExitT & " 秒……" Call ShowStr Case 25 ctStrS = -1 AddStr "警告" AddStr "由于你使用了盗版操作系统" AddStr "微软惩罚你:定期死机" Call ShowStr Case Else If ctT > 30 Then ctT = 0 End Select End Sub Private Sub AddStr(nStr) ctStrS = ctStrS + 1 ReDim Preserve ctStr(0 To ctStrS): ctStr(ctStrS) = nStr End Sub Private Sub ShowStr() Dim I As Long, S1 As Single, Y0 As Single, Y As Single, Hj As Single S1 = Me.TextHeight("A"): Hj = 0.5 '行高和行距 Y0 = S1 * (1 + Hj) * (1 + ctStrS) - S1 * Hj Y0 = (Me.ScaleHeight - Y0) * 0.5 Me.Cls For I = 0 To ctStrS Me.CurrentX = (Me.ScaleWidth - Me.TextWidth(ctStr(I))) * 0.5 Me.CurrentY = Y0 + I * S1 * (1 + Hj) Me.Print ctStr(I) Next End Sub Private Sub WinInTop(nWnd As Long, Optional InTop As Boolean) Const HWND_NoTopMost = -2 '取消在最前 Const HWND_TopMost = -1 '最上 Const SWP_NoSize = &H1 'wFlags 参数 Const SWP_NoMove = &H2 Const SWP_NoZorder = &H4 Const SWP_ShowWindow = &H40 Const SWP_HideWindow = &H80 Dim nIn As Long If InTop Then nIn = HWND_TopMost Else nIn = HWND_NoTopMost SetWindowPos nWnd, nIn, 0, 0, 0, 0, SWP_NoSize + SWP_NoMove End Sub
2013年11月30日
94 阅读
9 评论
0 点赞
1
2
3