C 语言
文章平均质量分 65
seekdwh
不忘初心,方得始终
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
寻找一个字符串中最长的重复子串
//寻找一个字符串中最长的重复子串//思路://1. 用字符串指针数组保存用户输入的字符串的所有后缀字符串;//2. 将后缀字符串集合进行排序;//3. 比较相邻字符串的公共子串长度,找到长度最大值,保存相应字符串即为所求#include #include #include #define MAXCHAR 5000 //最长处理5000个字符转载 2014-10-17 11:44:49 · 1211 阅读 · 0 评论 -
C语言单链表实现19个功能完全详解
最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的。自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能。到目前我只写了一半,先传上来,大家有兴趣的可以帮忙指正,谢谢在vs2010上面编译运行无错误。每天都会把我写的新代码添加到这个里面。直到此链表完成。#include "stdafx.h"转载 2014-09-29 17:05:00 · 657 阅读 · 0 评论 -
最好的求平方根的方法(精确度VS速度)
文章来源链接:http://www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspxTechnorati 标签: 平方根,算法,速度,精确度,Quake3,c++,c简介: 我喜欢用DirectX进行游戏编程。我注意到在我的游戏中大多数被调用函数都是在Math.h中的标准sprt方法。所以,我被迫寻找比标准sqrt函数更加快速的函转载 2014-10-07 20:38:42 · 3781 阅读 · 0 评论 -
函数可重入性及编写规范
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。转载 2014-10-21 17:00:18 · 582 阅读 · 0 评论 -
malloc()参数为0的情况
问题来自于《程序员面试宝典(第三版)》第12.2节问题9(这里不评价《程序员面试宝典》,就题论题):下面的代码片段输出是什么?为什么?char *ptr;if((ptr = (char *)malloc(0))==NULL) puts("Got a null pointer");else puts("Got a valid pointer"转载 2014-09-27 20:21:57 · 1655 阅读 · 0 评论 -
查找无序数组中的一个元素下标,并分析时间和空间复杂度, 考虑效率(很重要)
//2014-9-25//查找无序数组中的一个元素下标,并分析时间和空间复杂度, 考虑效率(很重要)//int find(int *a, int n, int count) //count为a数组长度,n为要查找的数//by dwh #includeint find(int*a, int n, int count){ int *ap; for(ap原创 2014-09-25 10:09:06 · 2459 阅读 · 0 评论 -
数组----下标与指针效率问题
有关数组指针与下标的效率,是一个一直困扰大家的问题。指针可能不会那么容易理解,下标的可读性会更好。但是,选择下标往往可能会影响效率。 最近看《C和指针》,有2个例子我觉得很好,很能说明这个问题,下面我把这两个例子与大家分享一下。 下面的例子中将数组中的所有元素都设置为0: 例1: (1)数组下标: int array[10原创 2014-09-25 09:07:21 · 5325 阅读 · 1 评论 -
对绝对地址的操作
嵌入式系統中往往需要讓程序跳到內存的某個地址去執行,比如想讓程序跳轉到絕對地址是0x100000去執行,應該怎麼做?這樣:*((void (*)(void))0x100000)();即可。解釋一下,想讓程序跳到某個絕對地址去執行得用函數指針,這或許也是函數指針的一個妙用吧!語句void(*)(void)聲明了一個返回值是void、無參數的函數的函數指針,這個指針转载 2014-09-27 20:03:38 · 914 阅读 · 0 评论 -
GetMemory错误讲解(指针练习)
错误程序:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( “%s”,str );} 这个一个转载 2014-09-02 16:17:09 · 522 阅读 · 0 评论 -
2014年华为7月校招(提前批)的一些题目
这是华为7月校招(提前批)的一些题目,没有给函数接口,从主函数开始编。每人三道题,机试时间两小时。60分的是第一题,100分的是第二题,160分的是第三题。 一、字符串截断输出(60分) 首先输入两个整数m,n,分别代表行数和长度,要求输出,将字符串截短成n长,不够补0,多了换行继续输出 如输入: 2,8 1234567812345678123 asd 输出 123456原创 2014-08-21 14:21:45 · 2147 阅读 · 1 评论 -
2014华为武汉上机试题一:手机电池余量
手机电池余量 描述: 自从有了智能手机,时刻都要关心手机的电量。你的任务很简单,用程序打印符号来表示当前手机的电量。用10行和10列来表示电池的电量,同时在外围加上边框,每一行表示10%的电量。假设还有60%的电量,则显示如下:+----------+|----------||----------||----------||----------||+++原创 2014-08-21 14:00:11 · 1854 阅读 · 0 评论 -
二叉树后序遍历(非递归)
二叉树后序遍历(非递归)二叉树的递归遍历算法就不用说了;在非递归算法中,后序遍历难度大,很多书上只给出思想或者几段无法直接调试的代码,甚至有些书上是错的,当时我在研究的过程中,就是按着书上错误的代码绕了好半天,几预抓狂。好在最终摸索出来了,不禁感叹很多出书人的水平真是...... 这里将直接可以在编译器里调试的代码贴出来(在DEV-C++编译器中编译通过)原创 2014-10-24 20:36:54 · 906 阅读 · 0 评论 -
strcpy(), memcpy(), memmove(), memset()原型及应用
一、strcpy()实现, 字符串拷贝.char *strcpy(char *strDest, const char *strSrc){ assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '\原创 2014-10-10 13:00:55 · 813 阅读 · 0 评论 -
求一个字符串中连续出现的次数最多的子串
这个题目不是编程珠玑上看到的,但是解法用到的数据结构在编程珠玑上有讲到,先归类到这里。求一个字符串中连续出现的次数最多的子串。例如字符串“abababc”,最多连续出现的为ab,连续出现三次。要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab。两个题目的解法有些类似,都用到了后缀数组这个数据结构。求一个字符串中连续出现的次数最多的子串,首先生成后缀数组转载 2014-10-17 10:37:56 · 946 阅读 · 0 评论 -
后缀数组是处理字符串的有力工具
后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。子串:字符串S的子串r[i..j],i后缀:后缀是指从某个位置i开始到整个串末尾结束的一个特殊子串。字符串 s 的从第i个字符开始的后缀表示为Suffix(i), 也就是Suffix(i)=r[i..l转载 2014-10-17 11:21:43 · 681 阅读 · 0 评论 -
静态局部变量
静态局部变量在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其 初始化为0。静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可转载 2014-10-16 10:33:09 · 2132 阅读 · 0 评论 -
int,int32_t,int64_t和struct内存对齐
这些事跨平台编程导致的;一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:16位平台char 1个字节8位short 2个字节16位int 2个字节16位long 4个字节32位指针 2个字节32位平台原创 2014-10-13 22:12:32 · 2662 阅读 · 0 评论 -
malloc函数详解
一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free(转载 2014-10-13 22:03:20 · 614 阅读 · 0 评论 -
给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针,链表的倒数第0个节点为链表的尾节点(尾节点的next成员为NULL) NODE* findnode(NODE *head,unsigned int k); 思路:首先求出单向链表的长度为Len,然后从链表头指针开始遍历,一直遍历Len-1-K次就可以找到倒数第K个节点指针。 代码实现如下:原创 2014-10-11 13:00:48 · 1912 阅读 · 0 评论 -
最长递增和递减子序列详解(longest increasing subsequence)
对于动态规划问题,往往存在递推解决方法,这个问题也不例外。要求长度为i的序列的Ai{a1,a2,……,ai}最长递增子序列,需要先求出序列Ai-1{a1,a2,……,ai-1}中以各元素(a1,a2,……,ai-1)作为最大元素的最长递增序列,然后把所有这些递增序列与ai比较,如果某个长度为m序列的末尾元素aj(j<i)比ai要小,则将元素ai加入这个递增子序列,得到一个新的长度为m+1的新序列,转载 2014-10-09 21:45:37 · 3821 阅读 · 0 评论 -
最长递增子序列
问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解法1:最长公共子序列法这个问题可以转换为最长公共子序列问题。如例子中的数组A{5,6, 7, 1, 2, 8},则我们排序该数组得到数组A‘{1, 2转载 2014-10-09 21:41:50 · 534 阅读 · 0 评论 -
求数组中最长递增子序列的长度
问题:给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续),如序列 1,-1,2,-3,4,-5,6,-7的最长递增子序列长度为4(1,2,4,6)方法一:最笨算法,复杂度为O(n*n),设一个辅助数组用来记录以对应元素结尾的最大递增子序列的长度(即lis[i]表示以array[i]结尾的最大递增子序列长度为lis[i]),从头到尾扫一遍原数组,对于每个元素转载 2014-10-09 20:43:49 · 1337 阅读 · 0 评论 -
strcpy(d,s)的溢出问题
//2014-10-10 //strcpy溢出问题 //函数形参和局部变量是保存在栈中的,而栈是从高地址向低地址扩展的。#include#includemain(){//char s[]="123456789",d[]="123";// char d[]="123", s[]="123456789";// char d[]="123";char原创 2014-10-10 12:44:42 · 958 阅读 · 0 评论 -
第二轮华为编程大赛2014-6-14
二师弟的星际加法描述:我 是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做 梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表 示N进制,然后给出两个数字的字符串,请算出其求和原创 2014-06-14 13:00:16 · 1749 阅读 · 0 评论 -
(转)百度2014移动研发笔试题目——1013清华版
一.简答题1.简述计算机的存储系统分为哪几个层次,为什么这样的分层能够提高程序的执行效率。2.浮点数在计算中如何表示,如何对浮点数判等。3.简述TCP与UDP协议的差别,两者与HTTP的关系。并列举HTTP的方法,以及常见的返回状态码。二.算法与程序设计1.设计一个反转字符串的函数 char *reverse_str(char *str),不使用系统函数转载 2014-06-05 16:39:51 · 678 阅读 · 0 评论 -
指针变量
原创 2013-10-28 17:43:02 · 581 阅读 · 0 评论 -
7. argc是命令行总的参数个数
7. argc是命令行总的参数个数 argv[]为保存命令行参数的字符串指针,其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数,argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数argc。数组元素初值由系统自动赋予。argc记录了用户在运行程序的命令行中输入的参数的个数。 arg[]指向的数原创 2013-10-28 23:05:17 · 2350 阅读 · 0 评论 -
字符串的长度
1. 字符串的长度就是字符串所包含字符的个数 2. C语言中的字符串长度指的是第一个’\0’字符前出现的字符个数 3. C语言中通过’\0’结束符来确定字符串的长度原创 2013-10-28 18:32:56 · 9432 阅读 · 0 评论 -
常量与指针
linux下测试:#include int main(){int i = 1;const int* p11 = &i;int const * p12 = &i;*p11 = 6;*p12 = 7;int * const p21 = &i;*p21 = 8;p21 = NULL;const int * const p = &i;原创 2013-10-28 17:39:19 · 677 阅读 · 0 评论 -
6. ftell()用法
函数名: ftell头文件: 功能:返回当前文件位置,也就是说返回FILE指针当前位置。函数原型: long ftell(FILE *stream);函数功能:函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文原创 2013-10-28 23:07:02 · 1038 阅读 · 0 评论 -
c语言中的字符串
1. 从概念上讲,C语言中没有字符串数据类型2. 在C语言中使用字符数组来模拟字符串3. C语言中的字符串是以’\0’结束的字符数组4. C语言中的字符串可以分配于栈空间,堆空间或者只读存储区#include #includeint main(){char s1[] = {'H','e','l','l','o'};char s2[]原创 2013-10-28 18:28:37 · 835 阅读 · 0 评论 -
利用指针实现变量交换
变量交换:可以利用宏定义,也可以利用函数指针址传递。切不可写成 void SWAP(int a, int b)!!!#include //#define SWAP(a,b) {int t=a;a=b;b=t;}void SWAP(int*a,int*b) {int t=*a;*a=*b;*b=t;}int main(){int原创 2013-10-28 17:28:02 · 1345 阅读 · 0 评论 -
struct结构体占内存大小计算
struct结构体占内存大小计算 注意:struct 的{}后面要加上 ”;“#includestruct A{ int a; double b; char c;};struct B{ double b;原创 2013-10-25 21:01:04 · 12786 阅读 · 0 评论 -
C语言struct内存占用问题
一、 ANSI C标准中并没有规定,相邻声明的变量在内存中一定要相邻。为了程序的高效性,内存对齐问题由编译器自行灵活处理,这样导致相邻的变量之间可能会有一些填充 字节。对于基本数据类型(int char),他们占用的内存空间在一个确定硬件系统下有个确定的值,所以,接下来我们只是考虑结构体成员内存分配情况。1、Win32平台下的微软C编译器(cl.exe for 80×86)的对齐策原创 2013-10-25 21:12:19 · 924 阅读 · 0 评论 -
与零值的比较
分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var) 解答: BOOL型变量:if(!var) int型变量: if(var==0) float型变量: const float EPSINON = 0.00001; if原创 2013-10-25 21:05:15 · 635 阅读 · 0 评论 -
字符串函数注意事项
1. 一般情况下,千万千万不要自行编写C标准库已经提供的函数。2. 标准库有时会使用汇编语言实现,目的就是为了充分利用机器所提供的特殊指令以追求最大的速度。3. 复用已经存在的函数库会更高效。4. 不受限制的字符串函数是通过寻找字符串的结束符’\0’来判断长度字符串复制:char* strcpy(char* dst, const char* src);函数实现:ch原创 2013-10-28 19:47:50 · 1138 阅读 · 0 评论 -
5. feof()
5. feof()功 能: 检测流上的文件结束符The function feof() tests the end-of-file indicator for the streampointed to by stream, returning non-zero if it is set. The end-of-fileindicator can only be cleared原创 2013-10-28 23:08:05 · 641 阅读 · 0 评论 -
华为C语言笔试题集合
①华为笔试题搜集1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在转载 2014-05-22 16:29:21 · 8186 阅读 · 0 评论 -
链表逆序
设链表节点为[cpp] view plaincopytypedef struct tagListNode{ int data; struct tagListNode* next; }ListNode, *List; 要求将一带链表头List head的单向链表逆序。分析: 1). 若链表为空或只有转载 2014-05-22 16:03:41 · 558 阅读 · 0 评论 -
将二叉树的两个孩子换位置,即左变右,右变左。(用递归和非递归两种方法)
将二叉树的两个孩子换位置,即左变右,右变左。(用递归和非递归两种方法) 递归的版本:void change( BTree * pTree ) { if( NULL == pTree ) return; BTree * pTemp = pTree.left; pTree-> left = pTree-> right; pTree-> right= pTemp; c转载 2014-05-22 15:52:13 · 980 阅读 · 0 评论
分享