自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CS练功房

任何没有经过验证的理论都是值得怀疑的

  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 字符串的转换、逆置、删除重复元素及判断是否为邮件格式

1.给定的一个字符串,比如:this is my program,要求将每个单词的首字母大写,输出:This Is My Program 。#include int getsline(char *s){ int i = 0, c; if(s == NULL) return 0; for(i = 0; (c = getchar()) != EOF && c != '\n';

2012-10-08 21:06:42 2387 1

原创 宏定义打印Hello World

#include "stdio.h"void print(){ *}void main(){}在*号处加一段代码,显示出"hello,world".分析:c++程序运行的入口函数是main(),因此要想办法在*处增加的代码中调用到main()函数。在c++中宏定义可以实现代码的替换,因此从宏定义入手可以解决这个问题。为了实现main()函数的运行,需要将main作替

2012-10-05 15:47:54 1609

原创 加减表达式求值

一个字符串只由'+','-'和‘0’-‘9’组成,并且'+','-'只作为为二元运算符,计算该表达式的值。思路:由于表达式只包含加、减两种运算,而加减运算是没有优先级的,因此可以顺序对表达式求值。首先提取表达式第一个数和第一个操作符,然后再提取第二个数,依据操作符将两个数相加或相减,得到的结果作为新的第一个数,再在表达式中提取一个操作符和操作数计算,直到表达式结束。例如对于表达式“1+12-7

2012-09-27 16:16:13 1640

原创 第一个只出现一次的字符

利用哈希表的思想来解,首先设置一个数组保存字符串中每个字符出现的次数,第一趟遍历字符串计算出每个字符出现的次数,第二次遍历找出第一个只出现一次的字符。算法的时间复杂度为O(n)。char FirstAppearedChar(char *str){ if(str == NULL) // 数据合法性检验 return '\0'; unsigned int hashTable[256

2012-09-18 10:20:18 957

原创 连续子数组的最大和

问题描述:输入一个整数数组,数组中有正数也有负数,一个或连续的多个整数组成一个子数组,求所有子数组的和的最大值。求子数组的和的最大值,首先可以求出数组所有子数组的和,再逐一比较可以得到和的最大值。这是最直观易懂的一种解法。但是对一个长度为n的数组,总共有n(n+1)/2个子数组,计算所有子数组的和时间复杂度为O(n^2)。而当n较大时,这种算法是很难被用户接受的。对于数组(a1, a2,

2012-09-17 20:54:45 7158 2

原创 最小的K个数

问题描述:给定的n个整数,计算其中最小的K个数。最直观的解法莫过于将n个数按升序排列后输出前k个。但是就效率来看,这种方法并不是最理想的。一种改进方法是借助快速排序中对数组的划分,以第k个元素对数组进行划分,使得比第k个数字小的数字都在其左边,比其大的数字都在它的右边。void Swap(int &a, int &b){ int c = a; a = b; b = c;}int

2012-09-17 16:09:30 2330

原创 字符串的排列

描述:输入一个字符串,打印出该字符串字符的所有排列。比如给定字符串“abc”,即求字符’a‘,’b‘,’c’的全排列,结果应该是abc、acb、bac、bca、cba和cab总有六个。1、全排列的递归方法思路:对于这个问题,我们从结果来分析,以abc和acb为例可以看出,相当于以a为字符串首字符,再和b、c的全排列cb、cb连接构成。以此类推,可以确定以b、c为首字符的全排列。因此解决这个

2012-09-16 15:03:45 1108

原创 计算器程序

计算器程序,非递归实现#include #include #include #include #include #include #include #include using namespace std;void calculateAndOutput(char* str);int isspace(int x){ if(x == ' '|| x == '\t' ||

2012-09-15 14:47:06 1240

原创 字符串转化为数字

将给定字符串转化为数字,如果结果为正较大返回2147483647,如果结果为负且较大返回-2147483648。字符串除包含数字外还包含空格及其他字符,因此需要对不是数字的字符进行处理。#include int isspace(int x){ if(x == ' '|| x == '\t' || x == '\n' || x == '\f' || x == '\b' || x

2012-09-15 14:29:35 952

原创 循环链表模板类

相对于单链表,循环链表的最后一个结点的next指针指向表头元素,而且每个结点还包含指向其前驱结点的prev指针。链表第一个结点的prev指针是链表的头结点,表头结点的prev指针指向链表最后一个结点。循环链表的插入和删除操作需要注意各指针的变化顺序,否则容易造成结点混乱。另外对循环链表来说,更容易找到指定结点的前驱。/* * 循环链表模板类 */#ifndef _DOUBLE_LIST_

2012-06-18 11:38:42 1720

原创 GVim智能补全clang

GVim编辑器结合auto-complete插件实现的代码自动补全虽然能满足一定的需求,但是其依赖tags,不能实现动态的代码补全。clang的出现打破了这一补全模式,其信赖于底层的llvm对代码解析,形成抽象语法树,进而进行补全。因此clang的补全效果非常好,而且补全较准确。1、安装clang使用clang之前需要安装代码解析包,我使用的是Ubuntu系统,可以通过sudo apt-g

2012-06-14 10:18:37 6183 1

原创 单链表模板类

链表是最基本的数据结构,是一组不连续的数据的集合,链表中每个结点除包含结点元素外,还包含下一结点的地址。对链表可以实现插入、删除、查找以及显示等操作。/* * 单链表模板类List.h */ #ifndef _LIST_H_#define _LIST_H_#include using namespace std;template class List{publi

2012-06-12 20:57:54 1250

原创 数据结构小总

1、栈和队列的区别栈是限定只能在表的一端进行插入和删除操作的线性表。 队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。 从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。 栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的

2012-05-31 22:19:25 928

转载 看到这篇比较windows和linux的文章,突然一阵莫名的无助

今天在csdn论坛上看到一篇文章,感觉还不错,所以转载到博客中,对于文中观点不作评论。以下是文章正文内容:原文地址:http://topic.csdn.net/u/20120528/21/f845ab95-5105-4108-aeda-6f1aa979309b.html?19308有个朋友看我半年没有用 Windows,有时就会问我:"你只用 Linux,有没有发现有些 Windows 能

2012-05-29 17:24:56 1183

转载 教你如何迅速秒杀掉:99%的海量数据处理面试题

前言   一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。    毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问

2012-05-16 14:30:32 993

原创 Linux程序设计——套接字

进程间通信的机制包括信号量、共享内存、管道和消息队列等,但是这些机制只能实现在一台计算的进程间通信。本文将介绍另外一种进程间通信的机制——套接字,可以实现计算机网络中的通信。1、套接字套接字是一种通信机制,通过使用这种通信机制,客户/服务器系统的开发既可以在本地单机上进行,也可以跨网络进行。套接字明确地将客户和服务器区分开来,可以实现将多个客户连接到一个服务器。2、套接字连接套接字

2012-05-16 12:29:10 2063

原创 Linux程序设计——信号量、共享内存和消息队列

1、信号量多线程程序中总有一部分临界代码,编程人员必须确保只有一个进程可以进入临界代码并拥有对资源的独占式访问权。使用信号量机制可以确保进程之间的并发执行。信号量是一个特殊的变量,只允许对它进行等待(wait)和发送信号(signal)这两种操作,即PV操作:P——用于等待V——用于发送信号》》》PV操作的定义P(sv)——sv > 0,sv -= 1。sv = 0挂起进程的执

2012-05-15 15:38:22 1833

原创 Linux程序设计——进程间通信:管道

使用信号在进程间通信,传送的信息只限于一个信号值。更多的数据交换需要使用一种新的机制——管道。管道(pipe)把一个进程的输出连接到另一个进程的输入。对shell命令的连接就是通过管道实现的,使用管道符号"|"连接。1、进程管道使用popen和pclose创建和关闭管道。popen允许一个程序将另一个程序作为新进程启动,并可以传递数据给它或者通过它接收数据。#include

2012-05-09 09:52:49 2828 2

原创 Linux安装中文输入法并设置开机启动

英文版Linux系统初始安装是没有中文输入法的,因此需要另外下载安装,而且下载安装好的中文输入法在开机时默认不启动。下面将介绍如何安装中文输入法,并设置为开机自动 启动。1、五笔输入法sudo apt-get install ibus-table-wubi2、拼音输入法在软件中心搜索sunpinyin,安装ibus-sunpinyin3、将ibus设置成开机启动Syst

2012-05-04 20:54:27 6847

原创 Linux程序设计——POSIX线程

在Linux中,进程控制系统几乎所有的活动,是系统很重要的组成部分。Linux系统同时支持通过进程创建新的进程,但是创建新进程的代价较高,因为新进程有自己的数据空间、环境和文件描述符。因此,如果想让一个进程同时做两件事件,那就需要线程发挥作用。线程是一个进程内部的控制序列,所有进程都至少有一个执行线程。当在进程中创建一个新的线程时,新的执行线程将拥有自己的栈,但与它的创建者共享全局变量、文件描

2012-04-30 13:59:45 1356 1

原创 树和大量数据处理

1、重建二叉树根据前序和中序遍历的结果,求后序遍历。#include #include // 在中序序列中找出前序中根的位置int Find(char in[], char ch, int s, int e){ while(s <= e && in[s] != ch) { s++; } return s;}void PostTraverse(char pre

2012-04-26 09:07:56 1123

原创 Linux程序设计——进程和信号

进程和信号在Linux系统中无处不在,它掌控着Linxu的活动,确保系统的正常运行,其重要性不言而喻。1、进程进程是指运行着一个或多个线程的地址空间和这些线程所需要的系统资源。在Linux中每个正在运行的程序实例都可以被看作是进程,这些进程之间可以共享程序代码和系统函数库,因此在任何时刻系统内存中只有代码的一份副本。系统中的每个进程在创建时都会被分配一个唯一的数字编号,称之为进程标识符

2012-04-23 22:24:53 1424 2

原创 面试题汇总

1、字符串翻转#include #include int main(){ int i = 0, j = 0, len; char str[10], res[10]; scanf("%s", str); len = strlen(str); for(i = len - 1; i >= 0; i--) { res[j] = str[i]; j++; } res[j]

2012-04-21 13:54:48 976

原创 求二进制数中1的个数

求整数的二进制表示中1的个数,最直接的方式是求出其二进制表示,再计算出二进制表示中1的个数。但是这种方法的效率较低。因为我们只需要统计二进制表示中1的个数,所以没有必要将整数先转化为二进制,可以在对整数处理的过程中计数。整数转化为二进制,除了直接除以2以外,位操作的右移一位可以实现同样的功能。右移过程中会将最后一们直接丢弃,因此在右移操作之前需要先判断最后一们是否为1,使用“与”操作可以实现。例如

2012-04-20 08:39:15 1880 4

原创 与阶乘相关的问题

1、求一个整数N的阶乘。对于较小的数N的阶乘,可以用基本数据类型表示。但是当N较大时,所得的结果会超出基本数据类型所能表示的范围。所以考虑使用数组保存最终的结果。#include #define N 200 // 结果位数int main(){ int i, j, n, r, s; int a[N] = {0}; // 阶乘结果数组 scanf("%

2012-04-19 22:46:04 801

原创 Linux程序设计——C语言连接MySQL数据库

MySQL是Linux系统下广泛使用的开源免费数据库,是Linux应用程序数据存储的首选。许多发布的Linux版本是自带MySQL的,但是也有些发布版本是不带的(比如我现在用的Ubuntu),那就需要手动安装。在Synaptic Packet Management中搜索“mysql”,可以找到“mysql-client"包,点击安装即可。安装好的MySQL是在命令行下运行的,这对于许多

2012-04-19 18:26:56 5846

原创 面试心得

xx牛逼公司的面试。。。一面:程序编写题:IP地址转化为32位无符号整型(C/C++实现)问题主要是关于操作系统的死锁及多线程程序开发需要注意的问题。数据结构方面的题目主要是链表的线性表的区别。二面(等了两个多小时等到的二面)程序编写题:二叉树后序遍历的非递归程序和求一个数(大于100)的阶乘。问答题:多态的机制及调用时的函数识别。C++内联函数、宏定义、多继承,mal

2012-04-19 15:23:35 1033 1

原创 Linux GVim插件配置

Vim编辑器被称为“编辑器之神“,是Linux系统中最常用的两个文本编辑器之一(另一个是被称为“神之编辑器”的Emacs)。GVim是图形化的Vim,很多版本的Linux都将GVim作为系统的一部分预装在客户端,但是最原始的GVim界面简单,功能都需要通过命令来实现,无形中提高了学习Vim的难度。虽然Vim入门较难,但是能够一直作为Linux常用文本编辑器之一,主要取决于它的可定制性。除了通过

2012-04-16 13:52:00 6631 1

原创 Ubuntu GVim中文帮助文档安装

在Ubuntu Linux安装GVim的帮助文档默认语言是英文,阅读不是很方便,因此需要将帮助更改为中文。首先到下面两个网站(任选一个)下载中文帮助文档安装文件。vim中文帮助文档官方地址:http://vimcdoc.sourceforge.net/Ubuntu GVim中文帮助文档最新下载地址:http://sourceforge.net/projects/vimcdoc/files/

2012-04-09 21:04:35 1967

原创 Linux程序设计——文件操作(标准I/O库)

Linux中定义了与底层文件访问对应的函数库即标准I/O库,这些库函数在头文件stdio.h中定义。1、fopen函数#include FILE *fopen(const char *filename, const char *mode);与底层文件访问中的open相对应。调用成功时返回一个非空的FILE指针,失败时返回NULL值。2、fread函数及fwrite

2012-03-30 14:52:49 1498

原创 Linux程序设计——文件操作(底层文件访问)

Linux底层文件访问主要包括以下几个方面的系统调用:1、write系统调用#include size_t write(int fildes, const void *buf, size_t nbytes); 功能:把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。 返回值:实际写入的字节数。#include #include

2012-03-29 15:04:04 2330

原创 Linux程序设计——shell

Linux是一个开源的操作系统,支持C/C++、Java、Ruby等程序设计语言,使用这些开发语言可以实现许多强大的功能,同样使用Linux系统本身提供的工具——shell也可以轻松实现这些强大的功能。相对于其他编程语言shell可以快速、简单地完成编程,而且易于配置、维护,具有较好的可移植性。但是shell也有一定的缺点,因为shell程序的特点使得其不适合用于完成时间紧迫型以及处理器忙碌型的任

2012-03-28 21:34:00 2046

原创 Linux下GVim配置

" /etc/vim/vimrc" All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just" /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime" you can find below. If you wis

2012-03-27 12:15:24 8259

原创 VMware 7安装Ubuntu

由于先前的Linux崩溃,所以需要重新在虚拟机下安装。但是在安装过程中却遇到了一些问题,其中最为麻烦是在虚拟机系统启动时提示找不到floppy,在网上找了很多方法尝试都没用,后来将VMware设置为“以管理员身份运行”并且更改运行时的兼容性,再启动VMware,便可以正常运行。这个问题解决后,下面是具体步骤:Step1:新建虚拟机Step2:选择配置方式,默认配置和高级配置,这里我

2012-03-21 13:27:29 1352

原创 获取网卡信息

在Windows中获取网络适配器相关信息是很方便的,可以通过GetAdaptersInfo函数获取并保存在IP_ADAPTER_INFO结构体中,再对结构休进行解析得到适配器信息。有关函数和结构体的详细说明可以参考MSDN,这里就不再复述。下面直接给出具体示例程序。//引入头文件#include #include #include #pragma comment(lib, "Iph

2012-03-19 22:12:26 2025

原创 删除字符串中首次出现的指定字符

字符串处理中有一个非常常用的操作:删除字符串中首次出现的指定字符。对于这个操作,一般的方法是自己写函数实现,其实C++ string库中提供的函数就可以直接实现这个功能。需要的两个函数如下:1、find_first_of #include size_type find_first_of( const string &str, size_type index = 0 ); si

2012-03-16 10:11:50 2138

原创 Web开发过程中需要注意的问题总结

Java EE开发过程中需要注意的问题:一、Java1、  request.getParameter();返回类型是String,不需要再做一次toString()操作。2、  request.getParameter();需要做null判断,不要直接用parse转换。3、  system.out.println;在提交代码时注释或删除。4、  List和Map对象要加上泛式。

2012-02-20 19:31:28 748

原创 字符串循环移动

字符串循环移位一直是字符串操作的常见问题,最直观的解决方法是每次将字符串中的元素移动一位,循环k次。这个算法虽然可以实现字符串的循环移位,但是算法的时间复杂度为O(k*n),其中n为字符串的长度,k为循环移位的位数。为了降低时间复杂度,通过对移位过程的详细分析发现,可以利用中间变量tmp保存str[0, k - 1],再将str[n - k, n - 1]依次放入str[0, k - 1],最后将

2012-02-16 19:31:37 2902 3

转载 Why C++ ? 王者归来

因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++, C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C

2012-02-16 15:12:03 920

原创 拓扑排序

在介绍拓扑排序前我们需要了解什么是偏序和全序。1、偏序——若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。2、全序——设R是集合X上的偏序,如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。而由某个集合上的一个偏序得到该集合上的一个全序,这个操作就称之为拓扑排序。拓扑排序的经典例子就是选课问题,数据结构书籍上都有介绍,这里不再赘述。那

2012-02-12 16:08:58 1929

Linux内核书目

文档里列出了Linux内核学习相关的经典图书

2012-05-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除