08 2012 档案

摘要:Huffman编码是一种比较好的变长编码的方式. 一般的方式中Huffman树的度为2, 一般采用的是Huffman树. 这个时候其实是对应的使用两个字符进行编码的方式. 但是如果采用的编码字符数多于两个的时候, 该怎么构建Huffman树呢?设是所采用的编码的个数. 其实, 对于的情况, 第一次进行合并的时候应该合并个, 其中,并且.这样我们可以进行遍历, 找到合适的: .所以此时构建步骤如下:1. 根据上面的公式求出和2. 将所有的结点放入到优先队列Q中, 然后不断的从Q中取出d个结点, 将这d个结点合并成一棵树,然后插入到Q中去.3. 下面是每棵子树合并成一棵树,不断的进行,直到只剩一棵 阅读全文
posted @ 2012-08-30 18:15 Mr.Rico 阅读(374) 评论(0) 推荐(0) 编辑
摘要:C语言中重要函数的简要分析及实例1. strspn与strcspn2. strtok与strpbrk3. strstr, strchr与strrchr4. 字符串与数值之间的转换:atoi,atol,atof,strtod,strtol,strtoul5. frexp和ldexp1. strspn与strcspn(1)函数strspn:size_t strspn ( const char * str1, const char * str2 );功 能: 在串中查找指定字符集的子集的第一次出现,如果str1中的所有字符都在str2中出现过,那么返回str1的长度。如果第一个字符就不在str2中, 阅读全文
posted @ 2012-08-27 15:42 Mr.Rico 阅读(478) 评论(0) 推荐(0) 编辑
摘要:多态性与将实现多态的函数的访问限定符没有任何关系,private 函数仍然可以实现多态,它的指针仍然位于vtbl中,只不过此时该函数的多态一般只能在基类的内部由其他非虚函数调用该函数的时候反映出来(而无法直接在类外部调用该函数来实现多态),访问限定符仅仅限制外部对类的成员的访问权限,它并没有破坏以下规则: 通过基类指针或引用调用成员函数时,如果该函数时非虚的,那么将采用静态绑定,即编译时绑定;如果该函数是虚拟的,则采用动态绑定,即运行时绑定。如下面的例子:#include#includeusingnamespacestd;classBase{private:virtualstringclass 阅读全文
posted @ 2012-08-26 11:13 Mr.Rico 阅读(633) 评论(0) 推荐(0) 编辑
摘要:1. C语言中的 sizeof 问题(1)类型转换的问题#include#defineNUM(sizeof(arr)/sizeof(arr[0]))intarr[]={1,2,3,4,5,6,7};intmain(){inti;for(i=-1;iintmain(){inti;i=10;printf("i:%d\n",i);printf("sizeof(i++)is:%d\n",sizeof(i++));printf("i:%d\n",i);return0;}结果是i : 10sizeof(i++) is: 4i : 10为什么第三个 阅读全文
posted @ 2012-08-25 21:13 Mr.Rico 阅读(398) 评论(0) 推荐(0) 编辑
摘要:1. 一般说来,volatile用在如下的几个地方:(1)、中断服务程序中修改的供其它程序检测的变量需要加volatile;(2)、多任务环境下各任务间共享的标志应该加volatile;(3)、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。2. 判断char是有符号还是无符号C语言中的char是有符号还是无符号有时候这个问题和平台或者编译器有关,gcc和 Ms cl 都默认是si 阅读全文
posted @ 2012-08-25 21:07 Mr.Rico 阅读(279) 评论(0) 推荐(0) 编辑
摘要:散列Hash函数是一种特殊的映射函数, 散列表Hash Table由散列函数所产生的一种数据结构. 这是一种非常重要的数据结构. 首先, 先了解散列表在数据结构方面的基础: 散列表是用于存储动态集的一种非常有效的数据结构。通过散列函数h(key)的计算结果,直接得到key关键字表示的元素的存储地址。散列技术中,可能会有两个不同的key1和key2,通过h(key)计算得到的地址是一样的,这就发生了冲突。散列技术中散列函数h(key)和解决冲突的技术是最关键的问题。 散列函数要求(1)能快速的计算;(2) 计算结果分布要均匀。 散列函数有如下几种常用的:(1) 除留余数法;(2) 平方取中法;. 阅读全文
posted @ 2012-08-25 20:37 Mr.Rico 阅读(5555) 评论(0) 推荐(1) 编辑
摘要:1. C库中的伪随机函数rand的实现 《The GNU C Library》里说的,大概如下: 公式: Y=(a*X+c)mod m 其中,a,c,m都是常数 一种取值是: a = 0x5DEECE66D = 25214903917 c = 0xb = 11 m = 2^48 用上面的公式可以这样写: __int64rand(){static__int64r=0;const__int64a=25214903917;const__int64c=11;const__int64m=1<<48;r=(r*a+c)%m;returnr;}2. ASNI 随机数生成的理解ANSI中和随机数生 阅读全文
posted @ 2012-08-25 20:29 Mr.Rico 阅读(2311) 评论(0) 推荐(0) 编辑
摘要:getword函数这儿所说的getword函数,是指从一段字符串中提取出其中的单词。其实这儿主要是分析利用一些标点符号和一些空白字符进行分割而成的单词,还没有达到编译器所使用的对字符串的分析。编译器是根据语言的文法对语言的源代码进行分析。一般需要利用编译原理中的文法分析来得到具体的token。而这儿的比较简单。对于C和C++有不同的实现方式。在C语言中有一个函数,strtok可以帮助实现这个。这个函数主要是根据给定的分隔符来对字符串进行分割。实现代码如下:/**10.C语言中利用strtok对字符串根据特定的字符进行划分*/#include#include#includeintgetwords 阅读全文
posted @ 2012-08-25 12:48 Mr.Rico 阅读(2159) 评论(0) 推荐(0) 编辑
摘要:有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括: a. 常量型成员变量(const) b. 引用型成员变量 (&) c. 静态成员变量 (static) d. 整型静态常量成员变量 static const int e. 非整型静态常量成员变量 static const double 1. 常量型成员初始化:只能在构造函数的初始化列表中进行直接初始化。 如: classTest{public:constintMY_MASK;Test():MY_MASK(0xff){}};如果不是在初始化列表中对 const 常量进行初始 阅读全文
posted @ 2012-08-25 12:40 Mr.Rico 阅读(1775) 评论(0) 推荐(0) 编辑
摘要:下面几个算法题是摘自《C语言实战105例(2006)》。但是有些解答开始没有看懂,然后从网上找了一些解答。1.储油问题 20程序如下:#include#defineMAX_STATION_NUM32/*定义最大允许的储油点数目*/intmain(){intk,i;floatwDistance;/*wDistance是终点至当前贮油点的距离*/floatstoredOil[MAX_STATION_NUM];/*storedOil[i]是第i个储油点的储油量*/floatdistance[MAX_STATION_NUM];/*distance[i]是第i个储油点到终点的距离*/puts(" 阅读全文
posted @ 2012-08-25 11:53 Mr.Rico 阅读(440) 评论(0) 推荐(0) 编辑
摘要:STL中并没有把heap作为一种容器组件,heap的实现亦需要更低一层的容器组件(诸如list,array,vector)作为其底层机制。Heap是一个类属算法,包含在algorithm头文件中。 在STL中为堆heap的创建和操作提供了4种算法:make_heap,pop_heap,push_heap和sort_heap。1. push_heap: 假定区间[first,last-1)已经包含了一个堆,把区间[first,last)调整为一个堆(从而 把last-1位置上的元素压入堆。 函数原型:voidpush_heap(first,last);voidpush_heap(first,la 阅读全文
posted @ 2012-08-25 08:06 Mr.Rico 阅读(854) 评论(0) 推荐(0) 编辑
摘要:复数的完整C++实现//Author:KeithA.Shomper//Date:11/17/03//Purpose:Todemonstrateaclass#includeusingstd::cout;usingstd::cin;usingstd::endl;usingstd::ostream;usingstd::istream;classcomplex_number{public:complex_number(doublereal=0.0,doubleimag=0.0):r(real),i(imag){}complex_number(constcomplex_number&rhs):r 阅读全文
posted @ 2012-08-24 10:48 Mr.Rico 阅读(485) 评论(0) 推荐(0) 编辑
摘要:C实现的二叉搜索树/**二叉搜索树*/#include#include#include#defineTRUE1#defineFALSE0typedefintBOOL;typedefstructNode{structNode*left,*right;size_tsize;chardata[];}Node_t;typedefconstvoid*GetKeyFunc_t(constvoid*dData);typedefintCmpFunc_t(constvoid*pKey1,constvoid*pKey2);typedefstruct{structNode*pRoot;CmpFunc_t*cmp;G 阅读全文
posted @ 2012-08-24 10:47 Mr.Rico 阅读(213) 评论(0) 推荐(0) 编辑
摘要:Stack的一种实现/**stack实现:利用vector*/#include#include#includeusingstd::cout;usingstd::endl;usingstd::vector;usingstd::string;usingstd::ostream;templateclassStack{public:Stack(intcap=0){if(cap)_stack.reserve(cap);}boolpop(T&vaulue);boolpush(Tvalue);boolfull();boolempty();voiddisplay();intsize();private 阅读全文
posted @ 2012-08-24 10:46 Mr.Rico 阅读(311) 评论(0) 推荐(0) 编辑
摘要:利用引用计数的实现方式#include#include#include#definemax(x,y)((x)>(y)?(x):(y))#definemin(x,y)((x)(len*1.5,n);size_tnewlen=needed?4*((needed-1)/4+1):0;char*newbuf=newlen?newchar[newlen]:0;if(buf){strncpy(newbuf,buf,used);}delete[]buf;buf=newbuf;len=newlen;}}classString{friendistream&operator>>(istr 阅读全文
posted @ 2012-08-24 10:42 Mr.Rico 阅读(333) 评论(0) 推荐(0) 编辑
摘要:自动进行空间扩展/**TheimplementationofStringlikevector*/#include#include#include#definemax(x,y)((x)>(y)?(x):(y))#definemin(x,y)((x)>(istream&,String&);friendostream&operator(constString&)const;booloperator>=(constString&)const;booloperator(constchar*)const;booloperator>=(cons 阅读全文
posted @ 2012-08-24 10:41 Mr.Rico 阅读(373) 评论(0) 推荐(0) 编辑
摘要:这是最基本的String的实现/**ThebasicimplementationofString*/#include#include#includeusingstd::istream;usingstd::ostream;usingstd::cout;usingstd::endl;usingstd::cin;usingstd::setw;classString{public:friendistream&operator>>(istream&,String&);friendostream&operator(constString&)const;b 阅读全文
posted @ 2012-08-24 10:40 Mr.Rico 阅读(131) 评论(0) 推荐(0) 编辑
摘要:JM中的有用程序#if0/**1.dct方法*/#include#include#include#defineM16#defineBLOCK_SIZE4staticinttmp[M];voidforward4x4(int(*block)[M],int(*tblock)[M],intpos_y,intpos_x){inti,ii;int*pTmp=tmp,*pblock;staticintp0,p1,p2,p3;staticintt0,t1,t2,t3;//Horizontalfor(i=pos_y;i#include#include#defineM16#defineBLOCK_SIZE4sta 阅读全文
posted @ 2012-08-24 10:37 Mr.Rico 阅读(214) 评论(0) 推荐(0) 编辑
摘要:linux下的示例程序#if0/**1.遍历目录-1*/#include#include#include#includevoidshow_directory(char*path){DIR*dir;structdirent*entry;staticintcount=0;inti=0;intj=0;if(NULL==(dir=opendir(path)))printf("erroropeningdir\n");else{chdir(path);//system("pwd");count+=1;while(entry=readdir(dir)){//if(st 阅读全文
posted @ 2012-08-24 10:36 Mr.Rico 阅读(342) 评论(0) 推荐(0) 编辑
摘要:C++的示例程序:1.#if0/*1.C++中整数/浮点等转化为字符串*/#include//forthe//forostringstream#include//forstringtemplatestd::stringto_string(Tconst&obj){std::ostringstreamout;out//forthe>>operator#include//forostringstream#include//forstringtemplateTfrom_string(std::stringconst&str){std::istringstreamin(str 阅读全文
posted @ 2012-08-24 10:28 Mr.Rico 阅读(647) 评论(0) 推荐(0) 编辑
摘要:第1章 跟踪范例 第2章 构造函数和析构函数 第3章 虚函数 1. 虚函数造成的性能损失 第4章 返回值优化 任何时候只要跳过了对象的创建和清除,就将会获得性能上的收益。返回值优化RVO(Return Value Optimization)是由编译器实现的优化,它用于加速源代码,是通过对源代码进行转化并消除对象的创建来实现的。 1. 按值返回的构造 下面是Complex类: classComplex{friendComplexoperator+(constComplex&,constComplex&);public:Complex(doubler=0.0,doublei=0.0 阅读全文
posted @ 2012-08-19 21:54 Mr.Rico 阅读(855) 评论(0) 推荐(0) 编辑
摘要:条款1:指针与引用的区别 条款2:尽量使用C++风格的类型转换 条款3:不要对数组使用多态 条款4:避免误用的缺省构造函数 条款5:谨慎定义类型转换函数 隐式转换的实现方式:单参数构造函数和隐式类型转换操作符。 条款6:自增,自减操作符前缀形式和后缀形式的区别 条款7:不要重载&&,||或, 条款8:理解各种不同含义的new和delete new 操作符(new operator)和new 操作(operator new)的区别。 new操作符调用一个函数来完成必要的内存分配,你能够重写或重载这个函数来改变这个行为。new操作符为分配内存所调用的函数名字是operator ne 阅读全文
posted @ 2012-08-19 21:49 Mr.Rico 阅读(303) 评论(0) 推荐(0) 编辑
摘要:条款01:视C++为一个语言联邦 条款02:尽量以const,enum,inline替换#define 条款03:尽可能使用const 条款04:确定对象使用前先被初始化 条款05:了解C++默认编写并调用哪些函数 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 条款07:为多态基类声明virtual析构函数 条款08:别让异常逃离析构函数 1. 编译单元 为免除"跨编译单元之初始化次序"问题,请以local static 对象替换non-local static对象。为免除"跨编译单元之初始化次序"问题,请以local static 对象替换n 阅读全文
posted @ 2012-08-19 21:47 Mr.Rico 阅读(255) 评论(0) 推荐(0) 编辑
摘要:这是摘自《More Effective C++ 2007》条款27:要求或禁止在堆中产生对象要求在堆中建立对象 让我们先从必须在堆中建立对象开始说起。为了执行这种限制,你必须找到一种方法禁止以调用"new"以外的其它手段建立对象。这很容易做到。非堆对象(non-heap object)在定义它的地方被自动构造,在生存时间结束时自动被释放,所以只要禁止使用隐式的构造函数和析构函数,就可以实现这种限制。把这些调用变得不合法的一种最直接的方法是把构造函数和析构函数声明为 private。这样做副作用太大。没有理由让这两个函数都是 private。最好让析构函数成为 private 阅读全文
posted @ 2012-08-19 14:21 Mr.Rico 阅读(778) 评论(0) 推荐(0) 编辑
摘要:这是摘自《More Effective C++ 2007》 条款24:理解虚函数,多重继承,虚基类和RTTI所需的代价 当调用一个虚拟函数时,被执行的代码必须与调用函数的对象的动态类型相一致;指向对象的指针或引用的类型是不重要的。编译器如何能够高效地提供这种行为呢?大多数编译器是使用 virtual table 和 virtual table pointers。virtual table 和 virtual table pointers 通常被分别地称为 vtbl 和 vptr。 一个 vtbl 通常是一个函数指针数组。(一些编译器使用链表来代替数组,但是基本方法是一样的)在程序中的每个类只要 阅读全文
posted @ 2012-08-19 13:45 Mr.Rico 阅读(961) 评论(0) 推荐(0) 编辑
摘要:1. vector中元素的访问:[]与at操作 2. 调整vector的大小:reserve reserve是保证vector的容量至少为某个值,它不会减少vector的容量。 resize是改变vector的大小,这个操作比较严格,给出多少,结果vector的容量就变为多少。 3. sprint的替代方案 4. 定位new表达式 5. 模板特化与函数重载 类模板可以被偏特化或者全特化,函数模板则只能够被全特化 重载决议只决定选出主模板 分析下面的代码: #includeusingnamespacestd;templatevoidf(T){coutvoidf(T*){coutvoidf(int 阅读全文
posted @ 2012-08-18 16:22 Mr.Rico 阅读(299) 评论(0) 推荐(0) 编辑
摘要:函数模板与类模板是两大类主要的C++泛型编程的使用方法。类模板可以进行模板偏特化和全特化,而函数模板只能进行全特化。但是类不同的是,函数还有一个重要的特性就是重载,如果将函数模板与函数重载的问题放在一块的时候,问题就变得比较麻烦了。 看下面的一个例子:includeusingnamespacestd;templatevoidf(T){coutvoidf(T*){coutvoidf(int*){cout(int*)"voidf(int*){cout(int*)"(int*)即调用的是第3个函数。这儿容易让人疑惑的是,为什么不是第4个函数:templatevoid f(int* 阅读全文
posted @ 2012-08-17 22:49 Mr.Rico 阅读(1035) 评论(0) 推荐(0) 编辑
摘要:1. std::cin和std::cout的类型是什么? 简单的回答,cin实际上是: std::basic_istream> cout实际上是: std::basic_ostream> 首先,cin和cout具有的类型分别是std::istream和std::ostream,接着,这些类型是std::basic_istream和std::basic_ostream的typedef,最后,考虑到模板参数的默认值,得到上面的答案。 #include#includeintmain(intargc,char*argv[]){usingnamespacestd;(argc>2?ofs 阅读全文
posted @ 2012-08-17 21:18 Mr.Rico 阅读(428) 评论(0) 推荐(0) 编辑
摘要:如果想要删除vector中值为val的元素,最容易想到的方法就是对vector进行遍历,然后遇到值为val时就将其删除。比较好的是vector容器有erase操作。但是这儿需要注意,与list中的erase不同,list的erase操作之后,之前获得的迭代器还是有效的,而在vector中因为vector是顺序存储,所以,一旦删除一个元素,之前获得的迭代器就会失效了,vector.begin()和vector.end()是变化的。注意到,erase的返回值是一个迭代器,而这个迭代器就是指向删除之前元素后的第一个元素。注意到这一点我们可以采用下面的方法实现:voidremove_v(vector& 阅读全文
posted @ 2012-08-17 14:51 Mr.Rico 阅读(11579) 评论(0) 推荐(0) 编辑
摘要:1.Iterator使用设计准则2. 不区分大小写的string这儿主要是采用修改char_traists的方式来得到与标准库中string类似的类ci_string实例代码如下:View Code #include#include#includeusingnamespacestd;structci_char_traits:publicchar_traits{staticbooleq(charc1,charc2){returntoupper(c1)==toupper(c2);}staticboolne(charc1,charc2){returntoupper(c1)!=toupper(c2); 阅读全文
posted @ 2012-08-17 09:37 Mr.Rico 阅读(348) 评论(0) 推荐(0) 编辑
摘要:第1章 C++编程基础 1. 另一种初始化语法:构造函数语法(直接初始化) 第2章 面向过程的编程风格 1. 函数声明给出就是函数原型 第3章 泛型编程风格 1. 泛型算法 2. 容器的insert操作:在position之前插入元素 3. 容器的erase操作删除position所指向的元素 4. 函数对象function objects 函数对象的使用: View Code #include#include#include#include#includeusingnamespacestd;intmain(){intn=10;vectorli;for(inti=0;i::iteratorit 阅读全文
posted @ 2012-08-16 13:52 Mr.Rico 阅读(610) 评论(0) 推荐(0) 编辑
摘要:第12章 类1. 类的声明与定义:前向声明,不完全类型2. 从const函数返回*this3. 可变数据成员mutable4. 用于const对象的构造函数:构造函数不能声明为const5. 构造函数初始化式构造函数的执行分为两个阶段:初始化阶段和普通的计算阶段6. 构造函数初始化列表7. 默认实参与构造函数8. 类通常定义一个默认构造函数,不然的话使用起来会很麻烦。9. 使用默认构造函数10. 隐式类类型转换:使用explicit来杜绝隐式类类型的转换11. 类成员的显式初始化,这种显式初始化的方式是从C继承来的12. static类成员13. static成员函数14. static成员变 阅读全文
posted @ 2012-08-15 09:36 Mr.Rico 阅读(583) 评论(0) 推荐(0) 编辑
摘要:第2章 数据和基本类型 1. 整型 2. 习题:左值和右值 3. C++关键字/保留字和操作符替代值 4. 声明,定义, 初始化和赋值是不同的概念。 声明是说明一个变量的存在,不会为变量进行内存空间的分配。 定义是说明一个变量的存在,同时为这个变量分配对应的内存空间。 初始化就是在进行变量定义的时候在所分配的内存空间中同时填入有意义的值。如果不进行初始化的话,变量虽然有对应的内存空间,但是内存空间中对应 的内容却是无意义的。 赋值是为已经存在的变量的改写值,也就是重新擦写变量内存空间的数据,填入新的数据。 C++中因为有类的存在所以,对初始化进行了更细的划分,分为直接初始化和复制初始化。 C+ 阅读全文
posted @ 2012-08-15 01:59 Mr.Rico 阅读(509) 评论(0) 推荐(0) 编辑
摘要:练习5.9 自引用、 程序代码如下:View Code #includeusingnamespacestd;enumContext{c_comment,cpp_comment,string_literal,char_literal,file_end};voidhandle_c_comment(){charch;while(cin.get(ch)){if(ch=='*'){while(cin.get(ch)&&ch=='*');if(ch=='/')break;}}}voidhandle_cpp_comment(){charch;w 阅读全文
posted @ 2012-08-09 23:54 Mr.Rico 阅读(365) 评论(0) 推荐(0) 编辑
摘要:第1章 面向对象方法的优点1. C语言的目标2. C++语言的目标第2章 快速入门——C++简介1. C++关键字第5章 程序员定义数据类型的聚集第6章 内存管理:堆和栈1. 作用域2. 存储类型Static的用法第19章 总结 阅读全文
posted @ 2012-08-09 12:45 Mr.Rico 阅读(413) 评论(0) 推荐(0) 编辑
摘要:第1 章 使用字符串第7章 使用关联容器下面一个交叉引用表达代码,其中包括了getword函数View Code #include#include#include#includeusingnamespacestd;vectorgetwords(conststring&str){vectorret;staticstringdelim="\\/,.;:!~*`\'\"\t\b\n#(){}[]]&=-+";stringword;size_tpos,pos2;size_tlen=str.size();pos=-1;boolflag=true;wh 阅读全文
posted @ 2012-08-09 12:33 Mr.Rico 阅读(395) 评论(0) 推荐(0) 编辑
摘要:第2章 C++概述1. 数据类型的意义2. %的定义,与/的关系第7章 简单数据类型1. float与int差别2. 算数上溢与算数下溢第8章 流和文件1. 每次读取一个字符使用流输入输出的get函数和put函数2. 程序风格——使用流作为条件3. 使用ignore跳过换行符4. C++中的参数栈 阅读全文
posted @ 2012-08-06 18:06 Mr.Rico 阅读(189) 评论(0) 推荐(0) 编辑
摘要:Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 阅读全文
posted @ 2012-08-06 18:02 Mr.Rico 阅读(211) 评论(0) 推荐(0) 编辑
摘要:第1章 简介1. literate程序2. 宏指令与条件编译指令第2章 接口与实现1. 接口与实现的关系2. Arith接口及实现:arith.h:View Code /*$Id:H:/drh/idioms/book/RCS/inter.doc,v1.111997/02/2119:42:15drhExp$*/externintArith_max(intx,inty);externintArith_min(intx,inty);externintArith_div(intx,inty);externintArith_mod(intx,inty);externintArith_ceiling(in 阅读全文
posted @ 2012-08-06 00:35 Mr.Rico 阅读(1636) 评论(1) 推荐(0) 编辑
摘要:C程序设计语言(第2版)这儿有一篇写的很好的读后感:http://www.cnblogs.com/xkfz007/articles/2566424.html第1章 导言1. 单词计数#includeintmain(){intc,nl,nw,nc,flag;flag=0;nl=nw=nc=0;while((c=getchar())!=EOF){++nc;if(c=='\n')nl++;if(c==''||c=='\n'||c=='\t')flag=0;elseif(!flag){flag=1;++nw;}}printf(" 阅读全文
posted @ 2012-08-05 11:08 Mr.Rico 阅读(3585) 评论(0) 推荐(2) 编辑
摘要:在使用C/C++进行编程的过程中,经常会遇到输入输出的问题。 对于C语言中, 1. 格式化输入输出。 在C语言中,最常用的格式化输入输出是scanf和printf函数。 和这两个函数对应的更安全的函数是fscanf和fprintf:指定文件指针 对于字符串的处理还有sscanf和sprintf:指定字符串 声明如下: int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...);... 阅读全文
posted @ 2012-08-02 10:18 Mr.Rico 阅读(27394) 评论(1) 推荐(2) 编辑
摘要:getline函数是一个比较常见的函数。根据它的名字我们就可以知道这个函数是来完成读入一行数据的。现在对getline函数进行一个总结。在标准C语言中,getline函数是不存在的。下面是一个简单的实现方式:intgetline_(chars[],intlim){intc,i;i=0;while((c=getchar())!=EOF&&c!='\n'&&i0)printf("%s\n",s);return0;}但是这个实现是有问题的,就是遇到空行的时候也会停止的。为了解决这个问题,我们需要重新考虑while循环的判断条件。在上 阅读全文
posted @ 2012-08-01 15:17 Mr.Rico 阅读(103678) 评论(4) 推荐(10) 编辑