摘要: 题目: 给定两个字符串s1和s2,要求判断s2是否被包含在s1或者通过s1循环移位的串.比如s1="ABCD",s2="CDA".很显然符合.而s1="ABCD",S2="CBA".则不符合.解法: 法一:很容易想到的方法是直接枚举法.即依次找到s2的各个循环移位并且同时判断是否包含在s1中.strstr函数可以满足判断字串判断.代码:#include "stdio.h"#include "stdlib.h"#include "string.h"char 阅读全文
posted @ 2014-02-15 17:59 brillliu 阅读(192) 评论(0) 推荐(0) 编辑
摘要: strcat函数: char *strcat*(char *d,const char *s)将s串复制到d串结尾(覆盖d的'\0'),并在新串后加'\0'.当然,d串要有足够的空间容得下s串的内容.char *my_strcat(char *d,const char *s){ char *str_dest=d; while(*d!='\0') d++; while((*d++=*s++)!='\0'); return str_dest;}1.第一行为了保存d的地址,返回str_dest也是为了链式表达式.2.while((*d++ 阅读全文
posted @ 2014-02-14 16:25 brillliu 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 要求写个函数来实现strlen()函数.解: 代码非常的简单,相信大家很容易想到类似下面这种代码:int my_strlen(const char *s){ int i=0; assert(s!=NULL); while(*s++) i++; }但是面试的时候大多会增加点难度,即不用中间变量来实现这个函数.这个时候我们只能用递归了.int my_strlen(const char *str){ if ((str == NULL) || (*str == '\0')){ return 0; }else{ re... 阅读全文
posted @ 2014-02-14 15:27 brillliu 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 看面试题的时候有个题目是不使用库函数,实现strcpy函数.(字符串拷贝函数)这个是我写的代码,在机器上编译过了.void my_strcpy(char *t,char *s){ while((*t++=*s++));}看了很多帖子,发现我这个代码的问题还是很多的.即使这么简单的一个小程序也有很多的东西需要考虑.下面总结:1.关于函数返回值.我写的是void,即函数不返回参数.所以我这个函数的唯一目的是将s地址字符串复制到t上.不返回任何信息.这样写的代码在以后使用是不方便的.林锐里提到:返回char *的目的是为了实现链式表达式.如: int length=strlen(... 阅读全文
posted @ 2014-02-14 01:02 brillliu 阅读(7952) 评论(0) 推荐(1) 编辑
摘要: 题目:输出序列当中出现次数最多的数的次数.解法: 最开始的想法是先进行排序.然后进行处理,但提交的时候发现了超时了.又想了一下,发现其实不用排序直接两个嵌套循环,第二层循环由第一层循环位置+1开始,不管怎样,第二次重复次数肯定小于等于第一次的. 可是提交给OJ的时候总是提示wrong anwser.具体原因未知.望知道的童鞋能告知一声.谢啦。#include "stdio.h"int main(){ int i,j,n,a[10000],t,max=1,k=1; scanf("%d",&t); while(t--!=0){ //t组数据 sca. 阅读全文
posted @ 2014-02-12 21:22 brillliu 阅读(115) 评论(0) 推荐(0) 编辑
摘要: C语言有个const,称为常量修饰符.即它所修饰的变量为常量,不允许被修改,赋值等等.1.const int a与int const a是等价的.修饰的都是a,表示a为常量,不允许被修改的.这也意味着const修饰的量在定义的时候就应该被初始化.2. (1):const int *p与int const *p也是等价的,记住这里修饰的是p指针所指向的量为常量.如果想修饰一个指针的话,那么应该这样做: p++;//合法 (*p)++;//非法 (2):int* const p;这个时候const右面是p,而且是指向整型的指针,所以此时p这个指针为常量... 阅读全文
posted @ 2014-02-12 13:36 brillliu 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 题目: 将一个整型序列重复出现的删掉,并输出删过之后的序列.解答方法: 1.开始尝试的方法是每次到一个文件都循环一下与之前的相比较,最后再做处理.但是发现实现比较繁琐. 2.直接遍历数组,将重复的位置进行标记,输出的时候跳过这些标记即可. #include "stdio.h"int main(){ int a[10000],i=0,j=0,k=0; while((scanf("%d",&a[k++]))!=EOF); for(i=0;i<k;i++) for(j=i+1;j<k;j++) //遍历数组 if(a[i]==a[j]... 阅读全文
posted @ 2014-02-11 22:15 brillliu 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 题目是任意进制之间的转换.解答思路: 将任意进制a转到十进制,再将十进制转到任意进制b.这个方法比较的直接......#include "stdio.h"#include "string.h"#include "math.h"#include "stdlib.h"#define NUM 62#define INPUTNUM 50/*初始化串表,用来方便查询字符对应的数字.如A对应数组下表10*/void init_string(char *s){ int i; char c; c='0'; for( 阅读全文
posted @ 2014-02-11 17:11 brillliu 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 这个题目实际上是计算两个随意给的日期之间的天数.算法: 这里的算法是算出两个日期离1年1月1日之间的天数,然后相减即可得到二者之间相差的天数. 判断闰年的宏值得学习,简洁高效.代码:#include "stdio.h"#define LEAP(y) (y%(y%100?4:400)==0) //闰年的判断宏.好算法unsigned int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};int between_days(int y,int m,int d){ int i,sum=0,k=0; for(i=1;i<y;i 阅读全文
posted @ 2014-02-11 01:20 brillliu 阅读(172) 评论(0) 推荐(1) 编辑
摘要: bash变量类别: 本地变量: (更小的有局部变量,之限于某一个代码段) 作用范围仅限当前源程序文件.仅对当前的shell进程有效(即理解为打开的一个shell终端,同时记住父shell的变量在子shell里同样没有效果). echo命令: -n:输出的时候省去\n(回车). -e:显示转义字符.如\t \e. echo -e "hello\tworld"中\t会被输出为table,而如果不加的话则输出 hello\tworld. bash中引号的作用:引用 ‘’(单引号):强引用 引号里的所... 阅读全文
posted @ 2014-02-10 15:23 brillliu 阅读(255) 评论(0) 推荐(0) 编辑