
C/C++
文章平均质量分 65
无限coding
这个作者很懒,什么都没留下…
展开
-
函数参数压栈顺序
一段如下代码:void func(int k,char * sz,int b){ return;}void main(void){ int i = 0x22222222; char szTest[] = "abcd"; int fb = 0x11111111; func(i,szTest,fb);}问:参数在栈中的转载 2014-08-22 09:43:21 · 1224 阅读 · 1 评论 -
常见的字符串面试问题(一)
一、整数与字符串之间的相互转换1.将字符串转换成整数 例如有一字符串str[]=“1234”,最直观的转换方法就是依次将每一个字符转换成相应的数字,然后乘10累加,即((1*10+2)*10+3)*10+4。想要得到每一位相应的数字,只需用每个字符减去数字0的ASCII码,即2= str[1]-'0'。 如果字符串首字符标示的是一个负数,即str[0]=='-'转载 2014-08-28 21:42:04 · 457 阅读 · 0 评论 -
二叉树中的那些常见的面试题
关于二叉树二叉树作为树的一种,是一种重要的数据结构,也是面试官经常考的东西。昨天看了一下关于树中的面试题,发现二叉树中的面试题比较常见的题型大概有下面几个:创建一颗二叉树(先序,中序,后序)、遍历一颗二叉树(先序,中序,后序和层次遍历)、求二叉树中叶子节点的个数、求二叉树的高度、求二叉树中两个节点的最近公共祖先、打印和为某一值的全部路径、求某一节点是否在一个树中等等。再详细的说这些面试转载 2014-08-28 09:38:43 · 701 阅读 · 0 评论 -
折半查找算法的实现
#include int find_mid(int array[], int n, int input){ int low = 0, high = n - 1; int mid; if (n < 1) return -1; while (low <= high) { mid = (low + high) / 2; if (array[mid] == input)原创 2014-08-27 20:20:51 · 768 阅读 · 0 评论 -
链表笔试面试题
1.已知链表的头结点head,写一个函数把这个链表逆序void List::reverse(){ list_node * p = head; list_node * q = p->next; list_node * r = NULL; while(q){ r = q->next;转载 2014-08-27 16:57:27 · 463 阅读 · 0 评论 -
链表的基本操作
#include #include typedef struct list{ int value; struct list *next;}node;node* add(node *head) //增加节点{ node *p = head, *p2; int tmp; char ch; scanf("%d", &tmp); ch = getchar(); p2 =原创 2014-08-27 15:54:18 · 485 阅读 · 0 评论 -
二叉树的基本操作
#include #include #include using namespace std;int cur;typedef struct binarytree{ int value; struct binarytree *lchild; struct binarytree *rchild;}node;//先序建立二叉树node *creat(node *p, int原创 2014-08-28 09:34:48 · 508 阅读 · 0 评论 -
C++构造函数与析构函数知多少
众所周知,几乎所有的面向对象的编程语言都保护构造函数与析构函数,好学者就要举手了,啥情况啊,Java里面不就没有析构函数嘛。好吧,你问倒我了,不过可以认为Java的垃圾自动回收机制实现了对象析构的功能。管他呢,还是看C++的构造函数和析构函数吧。 构造函数 对于C++的构造函数,暂且将其分为以下几类:1. 默认构造函数2. 隐士转换构造函数3. 拷贝构造函数4转载 2014-08-26 15:08:27 · 504 阅读 · 0 评论 -
程序员必须知道的8大排序和3大查找
本文要介绍的这些排序算法就是基础中的基础,程序员必知!1、直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例2、希尔排序(也称最小增量排序)(1)基本思想:算法先将要排序的转载 2014-08-13 16:38:43 · 863 阅读 · 0 评论 -
C函数调用与堆栈的变化
感想:这个的堆栈的图示画的还是非常好的。。。。。。。,反汇编的注释也是相当通俗易懂,就是纳闷,我的反汇编的代码为嘛不好复制出来呢,本来想自己写这篇文章的~~~ 这几天突然很想弄明白c函数调用时栈的使用情况,上网查了一下资料,自已也研究了一下,这篇blog就把我的所得记录下来吧。这篇blog试图讲明当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的。这些转载 2014-09-20 14:31:22 · 698 阅读 · 0 评论 -
kmp算法的实现
#include #include #include //计算next数组void get_next(char *pstr, int next[]){ int len = strlen(pstr); next[0] = -1; int pre = -1; int post = 0; while (post < len - 1) { if (pre == -1 || ps原创 2014-09-08 10:02:09 · 502 阅读 · 0 评论 -
常见的字符串面试问题(二)
1)写出在母串中查找子串出现次数的代码.int count1(char* str,char* s){ char* s1; char* s2; int count = 0; while(*str!='\0') { s1 = str; s2 = s; while(*s2 == *s1&&(*转载 2014-08-28 21:43:30 · 710 阅读 · 0 评论 -
最大全1子矩阵
题目描述:在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行是两个整数m、n(1矩阵共有m行,每行有n个整数,分别是0或1,相邻两数之间严格用一个空格隔开。输出:对应每个测试案例,输出矩阵中面积最大的全1子矩阵的元素个数。样转载 2014-09-11 21:35:44 · 971 阅读 · 0 评论 -
面试中的一些字符串操作
//字符串转整形int str_to_int(char str[]){ int num, i = 0, flag = 0; if (str[i] == '+' || str[i] == '-') { if (str[i] == '-') flag = 1; ++i } for (num = 0; str[i] != '\0'; ++ i) { num = 10 *原创 2014-09-01 18:43:53 · 559 阅读 · 0 评论 -
求二叉树中节点的差的最大值
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。原创 2014-08-29 20:59:15 · 961 阅读 · 0 评论 -
求最长公共子串
给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。int str_max(char *text, char *query)原创 2014-08-29 20:54:31 · 572 阅读 · 0 评论 -
结构体的存储方式
在做课程设计的时候发现结构体的入口地址与它的第一个元素地址相同Typedef union student { Char name[10]; Long sno; Char sex; Float score [4]; } STU; Main () { STU a[5]; Printf(“%d/n”,si转载 2014-08-19 14:23:29 · 1006 阅读 · 0 评论 -
c语言 printf()输出格式控制
1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G转载 2014-06-18 09:15:55 · 1305 阅读 · 0 评论 -
C++程序的内存布局
对任何一个普通C++程序来讲,它都会涉及到5种不同的数据段。常用的几个数据段种包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。不错,这几种数据段都在其中,但除了以上几种数据段之外,进程还另外包含两种数据段。下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区。代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防转载 2014-08-15 10:39:57 · 504 阅读 · 0 评论 -
C++ static与const的区别
对于C/C++语言来讲, :-----const就是只读的意思,只在声明中使用; -----static一般有2个作用,规定作用域和存储方式. 对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放; 对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数转载 2014-08-19 14:55:16 · 1051 阅读 · 0 评论 -
C语言编程规范(排版)
排版1.1 严格采用阶梯层次组织程序代码函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case 语句下的情况处理语句也要遵从语句缩进要求。程序块的分界符(如C/C++ 语言的大括号‘{’ 和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if 、for 、do 、while 、switch 、转载 2014-06-19 14:10:46 · 3099 阅读 · 0 评论 -
两个整数间1出现的次数
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。原创 2014-06-29 19:13:43 · 1132 阅读 · 0 评论 -
阿里巴巴集团2014校园招聘笔试题(9月22北京)
第一部分 单选题(前10题,每题2分;后10题,每题3分。选对得满分,选错倒扣1分,不选得0分)1、一次内存访问,SSD硬盘访问和SATA硬盘随机访问的时间分别是() A、几微秒,几毫秒,几十毫秒 B、几十纳秒,几十微秒,几十毫秒 C、几十纳秒,几十微秒,几十毫秒 D、几微秒,几十微秒,几十毫秒 2、8进制数256,转化成7进制数是转载 2014-08-29 16:37:58 · 1960 阅读 · 0 评论 -
【C++专题】static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3;double dval = 3.14159;转载 2014-09-08 14:55:44 · 361 阅读 · 0 评论 -
联合体存储空间
/* 功能:演示联合体存储方式 备注: 1、内存中数据低位字节存入低位地址,高位字节存入高位字节。 2、联合体存储空间为最大的元素占用空间,此空间公用。 */#include using namespace std;union //联合体空间大小为i的大小,4Bytes { unsigned char a;原创 2014-08-21 17:04:25 · 995 阅读 · 0 评论 -
空类大小
1、为何空类的大小不是0呢?为了确保两个不同对象的地址不同,必须如此。类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.2、请看下面的类:class A{ virtual void f(){} };class B:pub转载 2014-08-19 15:47:45 · 509 阅读 · 0 评论 -
C/C++产生随机数
C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。例如:#includ转载 2014-08-15 21:10:20 · 574 阅读 · 0 评论 -
三十分钟掌握STL(3)
函数和函数对象STL中,函数被称为算法,也就是说它们和标准C库函数相比,它们更为通用。STL算法通过重载operator()函数实现为模板类或模板函数。这些类用于创建函数对象,对容器中的数据进行各种各样的操作。下面的几节解释如何使用函数和函数对象。函数和断言经常需要对容器中的数据进行用户自定义的操作。例如,你可能希望遍历一个容器中所有对象的STL算法能够回调自己的函数。例如#inc转载 2014-06-21 10:06:56 · 620 阅读 · 0 评论 -
STL 容器类基本操作
vectorc.empty()判断容器是否为空。c.front()传回第一个数据。get_allocator使用构造函数返回一个拷贝。c.insert(pos,elem)//在pos位置插入一个elem拷贝,传回新数据位置c.insert(pos,n,elem)//在pos位置插入n个elem数据,无返回值c.insert(pos,beg,end)//在po原创 2014-06-21 10:53:33 · 674 阅读 · 0 评论 -
三十分钟掌握STL(2)
迭代器迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL 容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作转载 2014-06-21 10:05:44 · 472 阅读 · 0 评论 -
求两个有序数组的中值
设数组a的长度为m, 数组B的长度为n, 两个数组都都是递增有序的。求这两个数组的中位数首先我们看看中位数的特点,一个大小为n的数组,如果n是奇数,则中位数只有一个,数组中恰好有 (n-1)/2 个元素比中位数小。如果n是偶数,则中位数有两个(下中位数和上中位数),这里我们只求下中位数,对于下中位数,数组中恰好有(n-1)/2个元素比下中位数小。此题中,中原创 2014-06-29 18:50:48 · 661 阅读 · 0 评论 -
C++运算符优先级
优先级操作符描述例子结合性1()[]->.::++--调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作符后置自减操作符(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;转载 2014-08-19 09:38:18 · 436 阅读 · 0 评论 -
sizeof和sizeof(string)的问题
文章出自:http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.htmlsizeof和sizeof(string)的问题今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:str转载 2014-08-19 15:24:00 · 687 阅读 · 0 评论 -
sizeof计算栈中分配的大小
#includeusing namespace std;class A1{public:int a;static int b;A1();~A1();};class A2{public :int a;char c;A2();~A2();};class A3{public:float a;char c;A3();~转载 2014-08-19 15:06:57 · 1134 阅读 · 0 评论 -
三十分钟掌握STL(1)
这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。译者:karycontact:karymay@163.netSTL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种转载 2014-06-21 10:03:43 · 530 阅读 · 0 评论 -
裘宗燕:C/C++ 语言中的表达式求值
裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5: a = 4; cout C++ 不是规定 要弄清这些,需要理解的一个问题是:如果程序里某处修改了一个变量(通过赋转载 2014-08-01 10:03:51 · 545 阅读 · 0 评论 -
C/C++基本数据类型长度
熟知基本数据类型是我们正确表达实际问题中各种数据的前提,因此我分类总结了一下C/C++/Windows /C#基本数据类型,以便日后查阅。 ANSI C/C++基本数据类型:TypeSize数值范围无值型void0 byte无值域布尔型bool 1转载 2014-08-19 11:09:13 · 530 阅读 · 0 评论 -
sprintf函数的用法
sprintf() 格式化输出函数(图形)功能: 函数sprintf()用来作格式化的输出。用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);说明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串转载 2014-08-16 20:07:49 · 519 阅读 · 0 评论 -
细说C++类型转换操作符
C++语言虽然兼容C,也支持C语言的类型转换用法,就是将类型用圆括号括起来,这种转换可视性比较差,难以跟踪错误的转换。C++提供了命名的强制转换操作符,毕竟转换有时是不安全的,所以使用命名转换操作符可以根据所使用的转换操作符可以判断风险级别。下面我们就来看看C++提供的四种命名的强制转换操作符的具体功能和用法。1.const_cast2.static_cast3.reinterpr转载 2014-08-21 16:31:14 · 426 阅读 · 0 评论 -
C++继承时子类父类同名成员变量的问题
代码如下:C/C++ code #includeiostream.h>class Base{public: int a; Base() { a=0; cout"I`m base Begin"endl; } int Print() { coutaendl; re转载 2014-08-20 21:37:04 · 8283 阅读 · 0 评论