题目给出的函数原型如下: int getCountOfString(const char *str); 由于参数是const的,所以字符串本身肯定是不能被修改的,题目大致思路就是备份一份字符串到堆空间中(可修改),然后遍历堆空间将重复的字符串置成\0,最后遍历整个堆上的字符串将去除\0后得到的总数返回。 int...
在前面介绍fseek和ftell两个函数的时候就做过这样的一个例子,本文不但有fseek和ftell的实现,还有一个使用了fgets实现的方法。这个例子是一个题目,题目提供了函数原型: int getSize(const char* filename, unsigned int* size); 完成要求: 1、...
逆置字符串是将字符串所有字符前后颠倒,有比较常见的两种思路,第一种是生成两个分别指向头和尾的指针,遍历字符串交换头尾指针,然后对头尾指针向字符串中间移动,最终得出交换结果。另外一种思路则是后续递归的方式。以字符串结束\0为递归终止条件,再调用自身函数后打印每一个字符即可逆置显示一个字符串。 void rever...
函数提供三个功能,一种是去除左侧空格和TAB、另外一种是去除右侧的空格和TAB,最后一种则是去除所有空格和TAB,适当修改代码也可以去除ASCII中的9~13的其他空白符。具体实现如下: #include <stdio.h> int StringStripWS(char* pStr, int typ...
C语言库函数中strlen、strcmp、strcpy、strcat是我们非常常用的一些字符串处理函数,我们不得不了解一下内部的工作原理,有必要思考如果没有这些库函数我们该如何实现这些函数的功能。以深入的了解字符串内部的处理机制。本文就记录了一些前辈们留下的非常简练的实现。 #include <stdio...
双向链表有别于单向链表,对于数据的排列、查找更加方便,但需要付出的小小代价则是在数据结构中增加一个指向上一个节点的指针,除了结构上的变化,对于我们理解也相对复杂了一些。 我们可以用下面这张非常形象的图片来想象双向链表的表现方式(来自传智播客教师课件): 双向链表插入数据同样与单向链表一样,都可以使用头插法和尾...
指针数组我们一般用来存放一组字符串,来进行比较或储存的作用,而操作指针数组可以通过两种方式,一种则是直接使用下标方式,而另外一种,则可以通过二级指针。我们可以通过一个非常简明的例子来了解他们之间的关系。 #include <stdio.h>#include <stdlib.h> int ...
数组指针一般用于函数传参,其他基本很少遇到,其概念相对繁琐,本文将对数组指针做一个从头到尾的透彻分析,如果以后印象模糊了,再回来看看。 #include <stdio.h>#include <stdlib.h> int main(int argc, char *argv[]){int n...
众所周知,typedef与#define都可以将系统关键字定义为一个其他名字来使用,方便我们记忆,比如 #define PCHAR char* 与 typedef char* PCHAR;,两种方式定义出来的PCHAR都可以用来定义新的变量。但本质绝非那么简单。 #define自定义的名字我们成为“宏”,而ty...
fseek可以移动FILE结构体中指向文件位置的指针指向,其第三个参数可以让我们非常灵活的将指针移动要任意自己需要的位置。而ftell则可以获取当前指针位置,返回一个long大小的数值,我们可以使用fseek将指向文件的指针移动到文件末尾,然后使用ftell取当前指针的位置,就可以得到一个文件的大小。具体实现如下...