![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 59
zhangyongliang0
学习能力强,曾自学完成mysql,linux shell ,socket编程,并学习了部分java的基础知识。<br/>乐观向上,喜欢钻研,热爱新事物。
展开
-
关于排列编程问题
突然,有个同学问起来如何用C++实现所有的排列输出问题,本以为很是简单,忽然发现并非如此,只恨自己没有将算法学到家,只是学到了简单的语法,从而只能把别人的东西先收藏在这儿:int isLegal(int B[],int n,int k){/*若数组元素个数为n并且B中元素各异,则认为是最终解*/ int i; int j; int flag=1; i翻译 2013-04-15 17:57:05 · 441 阅读 · 0 评论 -
提取单词
//***************************************************************************************************************************************//输入一个字符串,提前单词到另一个二维数组中,单词以空格作为分隔符int main(){ char s[100]="原创 2013-09-06 16:32:26 · 888 阅读 · 0 评论 -
判断括号是否配对
这里单就纯括号的字符串进行判断,而且仅限于左右括号相等的情况正确,不相等的显然就不用判断了,肯定不配对咯//递归判定int fun(char *s,int len){ int i=0,j=0; while(s[i]=='(')//移到连续的'('结束 i++; if(i>0&&s[i]==')')//如果下一个字符是')',则成对消去括号 {for(j=i+1;j<len;j+原创 2013-09-06 14:47:46 · 928 阅读 · 0 评论 -
判断二进制数中1的个数
//判断二进制中1的个数int main(){ int a; int i=0; puts("input a:"); scanf("%d",&a); while(a) { if(a&1) i++; a=(a>>1); } printf("The num:%d\n",i); return 0;}原创 2013-09-06 14:52:37 · 616 阅读 · 0 评论 -
像类一样使用结构体
结构体同样可以有函数成员,也可以有构造函数,只是这些成员都默认是public的//以下是结构体按照类的使用方式使用成员函数,构造函数typedef struct da{ int a; int b; da()//空构造函数 {} da(int c ,int d )//含有两个参数的构造函数 { a=c; b=d; } void fun() { cout<<"hell原创 2013-09-06 15:33:19 · 582 阅读 · 0 评论 -
一位数四则运算
//对一个只含有同级运算符的数字字符串进行计算(仅限个位数的)int calc(char *s){ int sum=0; sum=(int)(*s)-48; while(*s) { if(*(s+1)=='*') {sum=sum*((int)(*(s+2))-48);} if(*(s+1)=='/') {sum=sum/((int)(*(s+2))-48);} if(原创 2013-09-06 18:02:12 · 943 阅读 · 0 评论 -
逆序输出单词
//以下将单词逆序输出,如:good morning 输出为 morning good //先来最笨的方法:把单词一个个放人新的二维数组中,然后把二维数组按照行的逆序输出int fun(char *p,int len){ int i=0,flag=0,j=0; int word=0; char tem[100][100]={0};//存放单词 while(p[i]) { whi原创 2013-09-06 14:24:58 · 1140 阅读 · 0 评论 -
构造二叉树并输出
//*************************************************************************************************************************************//构造一棵二叉树,一个节点最多有两个儿子,但有可能有很多堂兄弟,这样对输入造成不便,从而选择先序构造树比较方便typedef原创 2013-09-06 15:23:11 · 713 阅读 · 1 评论 -
对只有乘法和除法的个位字符串进行计算
//对一个只含有*和/的数字字符串进行计算int calc(char *s){ int sum=0; sum=(int)(*s)-48; cout<<sum<<endl; while(*s) { if(*(s+1)=='*') {sum=sum*((int)(*(s+2))-48);} if(*(s+1)=='/') {sum=sum/((int)(*(s+2))-48);}原创 2013-09-06 17:14:49 · 439 阅读 · 0 评论 -
压缩字符串
#include#includeusing namspace std;//以下压缩连续的字符void del(char *s,int len){ int i=0,j=0; char *p=s; cout<<"len="<<len<<endl; while(*p) { while(*p==*(p+1)) for(char *q=p;*q;q++)原创 2013-09-09 15:31:35 · 359 阅读 · 0 评论 -
判断子串的存在
int search(char *s,char * sub){ char *p,*q; p=s;q=sub; while(*p)//该语句是为了让指针一直移动下去 { while((*p!=*q)&&*p)//如果首字符不同,则不断往下移动 p++; while((*p==*q)&&(*q))//移动到首字符相等的时候,逐个判断 { p++;q++; }原创 2013-09-11 10:15:51 · 485 阅读 · 0 评论 -
逆序输出链表
#includeusing namespace std;//构造单向链表typedef struct Lis{ char ele; int n; Lis *next;}Lis;Lis* createLis(int n){ Lis *head=NULL; Lis *p=NULL,*pre=NULL; int i=0; head=(Lis *)malloc(sizeof(原创 2013-09-05 16:59:52 · 598 阅读 · 0 评论 -
堆排序
//以下从一个任意 的数组出发构建最大堆 ,然后进行堆排序void swap(int *a,int *b)//交换值{int tem=0;tem=*a;*a=*b;*b=tem;}void Max(int A[20],int i,int len)//保证最大堆的性质{int l,r,largest;l=2*i+1;r=2*(i+1);if(lA[i])largest=l;else largest=原创 2013-09-25 17:59:51 · 416 阅读 · 0 评论 -
高位数加法(改进)
上一篇对于最高位有进位的情况忽略了,现在加以改进,只是在盛放结果的数组高位赋值为0,最后选择性输出//计算高位数加法,将每个位数都放在数组中,另外一个数组装结果,首位赋值为0,这是为了防止进位int main(){ int a[100],b[100],s[100]={0}; int i=0,j=0,k=0; int c=11;int la=0,lb=0,lc=0; puts("i原创 2013-09-06 14:38:00 · 999 阅读 · 0 评论 -
关于3n+1问题的验证
输入一个整数,输出它的3n+1序列//3*n+1的验证int fun(int a ){ if(a%2==0) { a=a/2; printf("%d\t",a); fun(a); } if(((a%2)!=0)&&(a!=1)) { a=a*3+1; printf("%d\t",a); fun(a); } if(a==1) exit(0);}int ma原创 2013-09-06 14:55:41 · 1154 阅读 · 0 评论 -
高精度加法(仅限正整数)
#define ln 100int main(int argc, char* argv[]){ int la = 0, lb = 0; int A[ln]; int B[ln]; for(int l=0; l<ln; l++) { A[l]=0; B[l]=0; } char a[ln];原创 2013-09-06 14:31:14 · 566 阅读 · 0 评论 -
虚函数与回调函数
虚函数:简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略实例详见下面参考资料:1.http://zhidao.baidu.com/question/32424351.html2.http:转载 2013-06-11 13:54:24 · 2315 阅读 · 0 评论 -
虚函数
对于常规的基类函数来说 :1 尽量使用非虚拟接口模式 (NVI) 让接口函数成为非虚拟的 .2 尽量让虚函数成为私用的 .3 只有当派生类需要调用基类对某个虚函数的实现时,才把虚函数声明为保护的 .4 基类的析构函数应该要么为共有虚函数 , 要么为保护虚函数 .说明 : 1,2 两条将虚共有接口的两个职责进行了很好的分解 , 遵守了单一职责原理 .第 4 条说明了 , 如果转载 2013-06-11 13:51:41 · 275 阅读 · 0 评论 -
关于UNIX和Linux系统下SUID、SGID
由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了一些资料,决定整理成本文,以供大家参考。限于本人的水平问题,文章中如果有不当之处,请广大网友指正。 一、UNIX下关于文件权限的表示方法和解析 SU转载 2013-06-18 14:49:13 · 589 阅读 · 0 评论 -
关于二进制1的个数
任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到的算法,请不要吝惜您的代码,分享的时候,也是学习和交流转载 2013-06-20 11:11:07 · 468 阅读 · 0 评论 -
Linux 网络知识
(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的f转载 2013-07-08 12:48:32 · 606 阅读 · 0 评论 -
Socket收发文件
Send分为阻塞和非阻塞,阻塞模式下,如果正常的话,会直到把你所需要发送的数据发完再返回;非阻塞,会根据你的socket在底层的可用缓冲区的大小,来将你的缓冲区当中的数据拷贝过去,有多大缓冲区就拷贝多少,缓冲区满了就立即返回,这个时候的返回值,只表示拷贝到缓冲区多少数据,但是并不代表发送多少数据,同时剩下的部分需要你再次调用send才会再一次拷贝到底层缓冲区。转载 2013-07-09 17:20:53 · 625 阅读 · 0 评论 -
linux 下文件夹类型
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin转载 2013-06-26 14:39:50 · 529 阅读 · 0 评论 -
关于exit() 和 return ()
exit把控制权交给系统,而return将控制权交给调用函数。exit()有返回值的,不过返回值传递给操作系统或者说运行环境。 exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。 main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且转载 2013-06-27 14:15:52 · 596 阅读 · 0 评论 -
关于 linux 中sockaddr_in
在windows/linux下有下面结构:sockaddr结构struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};sa_family是地址家族,一般都是“转载 2013-06-27 11:49:57 · 1471 阅读 · 0 评论 -
关于数组(指针)作为参数
过去,我一直以为,数组作为函数参数,就相当于将整个数组参与了函数运算, 后来再看c prime 后,才知道错了。作为参数,数组名和指针是一样的,你别想知道传进来的数组有多么大,因为传进来的,只是一个地址,我不能用sizeof去判断这个数组的长度,因为无从判断,从而也不能通过for循环来判断结尾,我只能从首地址开始,一直往后面判断,直到数组结束。 我可以定义数组的长度,但这样的函数就只能原创 2013-08-21 10:33:00 · 1061 阅读 · 0 评论 -
报数问题(约瑟夫环)
解法一:用数组模拟#includeusing namespace std;int main(){ int sign,n,m,i,Loop[100],Count; while(cin>>n>>m&&n&&m) { for(i=0;i) Loop[i]=i+1; sign=0; for(i=0;i) { Count=0; while(Countm)转载 2013-08-13 16:16:42 · 542 阅读 · 0 评论 -
不停的输入,不停的判断
这两天突然傻了一样遇到没有事先输入数据就要进入循环,还要不停的输入,直到输入某个字符才结束,这个简单的东西,差点把我搞疯了。只怪自己技艺不精好吧先从头开始吧来看这个小家伙吧不停的输入正整数,然后将其转化为时,分格式需要while()判断条件就是输入值本身,那必须要得进入循环才中啊,必须要有个值才能进入循环才中啊那就先给他一个真值吧#include原创 2013-08-13 10:33:00 · 550 阅读 · 0 评论 -
堆排序
//以下从一个任意 的数组出发构建最大堆 ,然后进行堆排序void swap(int *a,int *b)//交换值{ int tem=0; tem=*a; *a=*b; *b=tem;}void Max(int A[20],int i,int len)//保证最大堆的性质{ int l,r,largest; l=2*i+1; r=2*(i+1); if(lA[i])原创 2013-09-25 18:01:53 · 424 阅读 · 0 评论