Presentation is loading. Please wait.

Presentation is loading. Please wait.

C常用函数 输入输出 stdio.h 字符串处理 string.h 工具函数 stdlib.h 数学函数 math.h

Similar presentations


Presentation on theme: "C常用函数 输入输出 stdio.h 字符串处理 string.h 工具函数 stdlib.h 数学函数 math.h"— Presentation transcript:

1 C常用函数 输入输出 stdio.h 字符串处理 string.h 工具函数 stdlib.h 数学函数 math.h
时间函数 time.h

2 1输入输出函数 stdio.h 输入 输出 scanf gets getchar printf
scanf(“%s”,str):读取的字符串不包含空格 gets gets(str):读取的字符串可包含空格 getchar 输出 printf

3 2字符串函数 string.h 2.1字符串转换为数值 atof、atoi、atol 2.2字符串处理 strcat, strncat
strcpy, strncpy strcmp, strncmp,strcmpi/stricmp,strncmpi/strnicmp strlwr, strupr strchr strstr strlen strrev strtok 2.3内存空间处理 memset、memcpy、memcmp

4 2.1字符串转换为数值 atof:字符串转换为double atoi:字符串转换为int atol:字符串转换为long

5 2.2字符串处理 strcpy, strncpy:字符串复制 strlwr, strupr:大小写转换 strchr:在字符串中查找某个字符
strcat, strncat:字符串连接 strcpy, strncpy:字符串复制 strcmp, strncmp,strcmpi/stricmp,strncmpi/strnicmp:字符串比较 strlwr, strupr:大小写转换 strchr:在字符串中查找某个字符 strstr:在字符串中查找某个子字符串 strlen:字符串长度 strrev:字符串反转 strtok:字符串分割

6 strlwr 原型:extern char *strlwr(char *s); 用法:#include <string.h>
说明:只转换s中出现的大写字母,不改变其它字符。返回指向s的指针。 这个函数很容易理解,但提及它是因为某些编译器并不含有该函数,因为需要我们自己写。(同样,后面一些函数也需要我们自己写。)

7 重写strlwr char * strLwr(char *str) { int i=0; while(str[i])
if(str[i]>='A' && str[i]<='Z') str[i] += 32; i++; } return str;

8 strupr 原型:extern char *strupr(char *s); 用法:#include <string.h>
说明:只转换s中出现的小写字母,不改变其它字符。返回指向s的指针。 同样,这个函数也可能需要重写。

9 strrev 原型:extern char *strrev(char *s); 用法:#include <string.h>
功能:把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)。 说明:返回指向颠倒顺序后的字符串指针。 这个函数很常用,但可能要重写。

10 重写strrev char * strRev(char *str) { int len = strlen(str); int i=0;
char chr_tmp; for(i=0;i<len/2;i++) chr_tmp = str[i]; str[i] = str[len-i-1]; str[len-i-1] = chr_tmp; } return str;

11 strstr 原型:extern char *strstr(char *haystack, char *needle);
用法:#include <string.h> 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。

12 strtok 原型:extern char *strtok(char *s, char *delim);
用法:#include <string.h> 功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。strtok在s中查找包含在delim中的字符并用NULL('\0')来替换,直到找遍整个字符串。返回指向下一个标记串。当没有标记串时则返回空字符NULL。

13 strtok 这个函数挺不错的,但要注意使用时第一次以外的都要传递参数NULL。
还有就是,这个函数会改变我们传递进去的参数,如果我们还需原参数就需备份原参数。 我们同时也可以重写这个函数。

14 重写strtok char * strTok(char * str_tmp) { static char * str;
static int i=0; if(str_tmp) str = str_tmp; i = 0; } while((str[i]<'a'||str[i]>'z') && str[i]) i++; if(!str[i]) return NULL; int j=i+1; while(str[j]>='a' && str[j]<='z') j++; str[j] = 0; int t = i; i = j+1; return str+t;

15 注意结尾 字符串如果结尾出没有结束符’\0’,需要人工加上’\0’,否则无法确定字符串在何处结束

16 2.3内存空间处理 void *memset( void *buffer, int ch, size_t count )
设置一块内存的值(注意,以字节为单位进行处理) void *memcpy( void *to, const void *from, size_t count ); 复制内存的值 int memcmp( const void *buffer1, const void *buffer2, size_t count ) 比较

17 3 工具函数stdlib.h 3.1 qsort 3.2 bsearch 3.3 随机数rand和srand
3.4 标准内存函数:malloc、free

18 3.1 qsort void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) ); 功能: 对buf 指向的数据(包含num 项,每项的大小为size)进行快速排序。如果函数compare 的第一个参数小于第二个参数,返回负值;如果等于返回零值;如果大于返回正值。函数对buf 指向的数据按升序排序。

19 对简单数据类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) {
return *(int *)a - *(int *)b; } qsort(num,100,sizeof(int),cmp);

20 对struct数组排序 struct point { int x,y; }; struct point t[5];
int cmp(const void *a,const void *b){ struct test s=*(struct test*)a,t=*(struct test*)b; if((s.x-t.x)>0) return 1; if((s.x-t.x)<0) return -1; if((s.y-t.y)>0) return 1; if((s.y-t.y)<0) return -1; return 0; } qsort(t,5,sizeof(struct test),cmp);

21 3.2 bsearch void *bsearch( const void *key, const void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );   参数:第一个:要查找的关键字。第二个:要查找的数组。第三个:指定数组中元素的数目。第四个:每个元素的长度(以字符为单位)。第五个:指向比较函数的指针。   功能: 函数用折半查找法在从数组元素buf[0]到buf[num-1] 匹配参数key。如果函数compare 的第一个参数小于第二个参数,返回负值;如果等于返回零值;如果大于返回正值。数组buf 中的元素应以升序排列。函数bsearch()的返回值是指向匹配项,如果没有发现匹配项,返回NULL

22 3.3随机数rand和srand int rand(void) void srand(unsigned seed)
从srand(seed)中指定的seed(种子)开始,返回一个[seed, 0x7fff]间的随机整数。 如果没有指定种子,则种子默认为1 void srand(unsigned seed) 参数seed是rand()的种子,用来初始化rand()的起始值。

23 随机数的生成 #include <stdio.h> #include <time.h>
#include <stdlib.h> int main() { int i; srand((unsigned int)time(NULL)); for(i=0;i<10;i++) printf("%u\n",rand()); return 0; }

24 3.4 标准内存函数stdlib.h malloc calloc realloc free
void *malloc( size_t size ) calloc realloc free void free(void *p)

25 动态创建数组 #include <stdio.h> main() { int *a; int i;
a=(int *)malloc(sizeof(int)*10); for(i=0;i<10;i++) a[i]=i; printf("%d\n",a[i]); free(a); }

26 动态创建结构 #include <stdio.h> #include <stdlib.h>
#include <string.h> struct student { char name[10]; int age; char sex; } main() struct student *t; t=(struct student *)malloc(sizeof(struct student)); strcpy(t->name,"Tom"); t->age=19; t->sex='m'; printf("%s %d %c\n",t->name,t->age,t->sex); free(t);


Download ppt "C常用函数 输入输出 stdio.h 字符串处理 string.h 工具函数 stdlib.h 数学函数 math.h"

Similar presentations


Ads by Google