char函数

[C/C++语法]—qsort及sort函数

扶醉桌前 提交于 2019-12-09 12:49:39
C语言和C++中,对sort函数的使用不同。C语言中没有预制的sort函数,如果在c语言中,要调用sort函数,就需要自定义一个用于排序的函数,或者使用c语言自有的qsort函数,其头文件为stdlib.h。而C++中qsort和sort函数皆可使用 qsort函数 qsort的头文件为<stdlib.h>,为C语言中的函数 运用基本的快速排序的方法,时间复杂度为O(n*logn),来了解一下qsort函数如何使用叭 函数原型: void qsort( void *base, size_t num, size_t width, int (__cdecl *compare ); 比较函数原型: int compare (const void *elem1, const void *elem2 ) ); 参数含义: 待比较数组的首地址 待比较元素个数 待比较的每个元素的大小 指向比较函数的指针(qsort函数中一定需要自己写) 比较函数的参数含义: 待比较数组首地址 待比较数组的尾地址 对int类型数组升序排序 int num [ 105 ] ; int cmp ( const void * a , const void * b ) { return * ( int * ) a - * ( int * ) b ; //(int *)a是将指针转为int类型,而*(int *

何时使用虚拟析构函数?

北战南征 提交于 2019-12-09 11:21:10
我对大多数面向对象理论有扎实的了解,但令我困惑的一件事是虚拟析构函数。 我以为无论链中的每个对象是什么,析构函数总是被调用。 您打算何时将它们虚拟化?为什么? #1楼 我喜欢考虑接口和接口的实现。 在C ++中,接口是纯虚拟类。 析构函数是接口的一部分,有望实现。 因此,析构函数应该是纯虚拟的。 构造函数呢? 构造函数实际上不是接口的一部分,因为对象总是显式实例化的。 #2楼 虚拟构造函数是不可能的,但虚拟析构函数是可能的。 让我们尝试一下... #include <iostream> using namespace std; class Base { public: Base(){ cout << "Base Constructor Called\n"; } ~Base(){ cout << "Base Destructor called\n"; } }; class Derived1: public Base { public: Derived1(){ cout << "Derived constructor called\n"; } ~Derived1(){ cout << "Derived destructor called\n"; } }; int main() { Base *b = new Derived1(); delete b; } 上面的代码输出以下内容:

atoi,itoa,strcpy, strcmp,strcpy, strcpy_s, memc...

不问归期 提交于 2019-12-09 10:30:51
strcpy()、strlen()、memcpy()、memmove()、memset()的实现 strcpy(), 字符串拷贝. char * strcpy( char * strDest, const char * strSrc) { assert((strDest != NULL) && (strSrc != NULL)); char * address = strDest; while ( ( * strDest ++ = * strSrc ++ ) != ' \0 ' ) NULL ; return address ; } strlen, 第一种方法: int strlen( const char *str) { assert(str != NULL); int len = 0; while ((*str++) != '\0' ) len++; return len; } 第二种方法: int strlen( const char *str) { assert(str != NULL); const char *p = str; while ((*p++) != '\0' ); return p - str - 1; } 第三种方法: int strlen( const char * str) { if (str[0] == '\0' ) return 0; else

setsockopt 设置socket 详细用法

核能气质少年 提交于 2019-12-09 10:26:17
1. closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt (s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历 TIME_WAIT的过程: BOOL bDontLinger = FALSE; setsockopt (s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); 3. 在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限: int nNetTimeout=1000;//1秒 //发送时限 setsockopt (socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //接收时限 setsockopt (socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); 4. 在send()的时候,返回的是实际发送出去的字节(同步

函数指针和指针函数

别说谁变了你拦得住时间么 提交于 2019-12-08 23:40:32
读了大佬的blog,清晰了一点...害,谁让老师说考的多呢 · 指针函数,返回指针的函数 int *fun(int x,int y); 在调用指针函数时,需要一个同类型的指针来接收其函数的返回值。 · 函数指针,指向函数的指针 int (*fun)(int x,int y); 把一个函数的地址赋值给他 fun = &Function; fun = Function; 调用 x = (*fun)(); x = fun(); 函数指针练习:编写一个函数char_contains(char str[],char c),如果字符串中包含字符c,则返回1,否则返回0,并在main函数中使用函数指针调用。 #include <stdio.h> int char_contains(char str[],char c) { //遍历整个字符串 for(int i = 0; i < strlen(str); i++) { if(str[i]==c) return 1; } return 0; } int main() { char str[] = "abcdef"; int (*p)(char str[],char b) = char_contains; if (p(str,'c')) { printf("%s contains char c\n",str); }else{ printf("%s

2019-2020-1 20175304 20175303 20175327 20175335 实验五 通讯协议设计

混江龙づ霸主 提交于 2019-12-08 23:34:33
2019-2020-1 20175304 20175303 20175327 20175335 实验五 通讯协议设计 一、实验内容 通讯协议设计-1 1.在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业 2.提交运行结果截图 通讯协议设计-2 1.在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护 2.提交测试截图 通讯协议设计-3 1 运行实验箱中,ARM调用Z32算法的实验,提交实验截图 2 用Z32的国密算法重新改写“wc服务器”的混合密码系统防护,提交运行截图 二、实验过程 通讯协议设计-1 1.OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。 2.OpenSSL整个软件包大概可以分成三个主要的功能部分: 密码算法库 SSL协议库 应用程序 OpenSSL源码的目录结构也是围绕这三个功能部分进行规划的。 密码算法库是一个强大完整的密码算法库,它是OpenSSL的基础部分,也是很值得一般密码安全技术人员研究的部分,它实现了目前大部分主流的密码算法和标准。主要包括对称算法、非对称算法、散列算法、数字签名和认证、X509数字证书标准、PKCS12、PKCS7等标准

海量数据处理(面试)

北战南征 提交于 2019-12-08 17:47:43
题目: 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 假设有一个大文件,里面以字符形式存储了IP与IP访问次数,这两数据按空格隔开,然后一行对应一个IP。 解决思路 算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址; 3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址; 4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP; 解决过程中的问题: (1)我的是FAT16文件系统,一个根目录下文件数量有限制,只能存放512个文件,我在批量创建的时候因为限制只有509个,所以我就按照509开始分文件 (2) 批量打开文件的函数 应当注意的是在写文件描述符关闭后才可以打开读的 void openFileOut(ofstream * out ) { for ( int i = 0 ; i < 509 ; ++i) { char path[ 100 ] = "D:\\VS2015\\代码\\C++file\\C++file\\文件\\" ;

C语言函数_string.h 之 内存comparison函数memcmp

拟墨画扇 提交于 2019-12-08 17:21:54
memcmp 原型: int memcmp(const void *ptr1, const void*ptr2, unsigned int count); 功能: memcmp用于比较内存区域ptr1和ptr2的前count个字节,是按字节进行比较的。 头文件: string.h 或 memory.h 返回值: < 0 :ptr1和ptr2所指内存中第一个不相等的字节有*((char*)ptr1+x) < * ((char*)ptr2+x) > 0 :ptr1和ptr2所指内存中第一个不相等的字节有*((char*)ptr1+x) > * ((char*)ptr2+x) = 0 :ptr1和ptr2所指的内存块中前count个字节都相等 说明: 1、函数的返回条件是:比较次数达count次或者*((char*)ptr1+x) - *((char*)ptr2+x)的值不 为零(即两个块内存中第x字节不相等)。 2、函数是按字节进行比较的,如果还没有达到上述返回条件,即使遇到'\0'也不会停止比较。 而判断规则是按照ASCII码表中字母的顺序进行比较的,即'a'的值为97,'A'的值为65,因此'a' 比'A'大。 3、调用函数时如果参数为结构体,则需要确保结构体中的填充字节被清零。例子: typedef struct memcmp_test { short data1; int

何时使用虚拟析构函数?

旧时模样 提交于 2019-12-08 14:23:28
我对大多数面向对象理论有扎实的了解,但令我困惑的一件事是虚拟析构函数。 我以为无论链中的每个对象是什么,析构函数总是被调用。 您打算何时将它们虚拟化?为什么? #1楼 我喜欢考虑接口和接口的实现。 在C ++中,接口是纯虚拟类。 析构函数是接口的一部分,有望实现。 因此,析构函数应该是纯虚拟的。 构造函数呢? 构造函数实际上不是接口的一部分,因为对象总是显式实例化的。 #2楼 虚拟构造函数是不可能的,但虚拟析构函数是可能的。 让我们尝试一下... #include <iostream> using namespace std; class Base { public: Base(){ cout << "Base Constructor Called\n"; } ~Base(){ cout << "Base Destructor called\n"; } }; class Derived1: public Base { public: Derived1(){ cout << "Derived constructor called\n"; } ~Derived1(){ cout << "Derived destructor called\n"; } }; int main() { Base *b = new Derived1(); delete b; } 上面的代码输出以下内容:

Oracle 自定义函数语法与实例

空扰寡人 提交于 2019-12-08 07:17:45
Oracle自定义函数的语法如下: create or replace function 函数名(参数1 模式 参数类型) return 返回值类型 as 变量1 变量类型; 变量2 变量类型; begin 函数体; end 函数名; 参数的模式有3种:( 如果没有注明, 参数默认的类型为 in. ) in : 为只读模式, 在函数中, 参数的值只能被引用, 不能被改变; out : 为只写模式, 只能被赋值, 不能被引用; in out : 可读可写. 提醒: 1.在Oracle自定义函数中, else if 的正确写法是 elsif 而不是 else if 2.使用 if 需要加 then "if 条件 then 操作" 简单的例子: 读入两个值, 返回比较大的值 create or replace function function1(para1 in number, para2 in number) return number as begin if para1 > para2 then return para1; else return para2; end if; end function1; 使用: select function1(666, 333) from dual; 结果: 另一个例子可能在实际中会用到, 有时候我们需要按非自然月进行数据统计,