您的位置:首页 > 其它

2013-7-10学习笔记[字符串操作,指向函数的指针]

2013-08-07 11:43 543 查看
字符串处理函数1.strlen函数这个函数可以用来测量字符串的字符个数,不包括\0int size = strlen("mj"); // 长度为2   char s1[] = "lmj"; int size1 = strlen(s1); // 长度为3   char s2[] = {'m', 'j', '\0', 'l', 'm', 'j', '\0'}; int size2 = strlen(s2); // 长度为2    //在统计字符长度的时候,遇到\0终止2.strcpy函数char s[10];strcpy(s, "lmj");
//逐个字符拷贝到s数组中,从起始地址开始
char s[10]; char c[] = {'m', 'j', '\0', 'l', 'm', 'j', '\0'}; strcpy(s, c);
//最后输出的时mj
3.strcat函数
char s1[30] = {'L', 'm', 'j', '\0', 'L', 'o', 'v', 'e', '\0'};  strcat(s1, "OC");  printf("%s", s1);
//找到要拼接的位置,找到第一个\0,然后直接拼接到字符串的底部,最后加上\0
输出结果为LmjOC
4.strcmp函数两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不相同或者遇见'\0'为止。如果全部字符都相同,则返回值为0。如果不相同,则返回两个字符串中第一个不相同的字符ASCII码值的差。即字符串1大于字符串2时函数返回值为正,否则为负。strcmp(str1,str2);//结果是:str1-str2 char s1[] = "abc"; char s2[] = "abc"; char s3[] = "aBc"; char s4[] = "ccb"; printf("%d, %d, %d", strcmp(s1, s2), strcmp(s1, s3), strcmp(s1, s4));输入结果:0,32,-2s1和s2相同,所以返回0
s1和s3是第2个字符不相同,b的ASCII码值是98,B的ASCII码值是66,b - B = 32,所以返回32
s1和s4是第1个字符就不相同,a的ASCII码值是97,c的ASCII码值是99,a - c = -2,所以返回-2

字符串方法
strlen(char *str) : 求字符串长度
strcpy(char *dest, char *src) : 把src拷贝到dest
strcat(char *dest, char *src) : 把src连接到dest后面
strcmp(char *s1, char *s2) : 按照各个字符(ascii)比较s1和s2,相等则返回0,否则返回ascii相减的结果
strstr(char *s1, char *s2) : 在s1中查找s2,返回找到的位置,若找不到则返回NULL

switch中条件判断只能是四种类型,整形,字符型,布尔类型(C语言中没有bool类型),枚举类型 枚举类型默认是从0开始
排序算法 // // main.c // test2 // // Created by 丁小未 on 13-7-10. // Copyright (c) 2013年 dingxiaowei. All rights reserved. //
#include <stdio.h> #define N 4 //冒泡排序 int* bubbleSort(int *num,int NN) //前面参数是指向整形数组的指针,后面的N是这个数组的大小 { for (int i=0; i<NN-1; i++) { //排序N-1次 for (int j=0; j<NN-1-i; j++) { //每次都从第一个一次往后面的比,大的排在后面,但后面已经排序好了的就不需要比了 if (num[j]>num[j+1]) { num[j]=num[j]^num[j+1]; //yi'huo num[j+1]=num[j]^num[j+1]; num[j]=num[j]^num[j+1]; } } } int *p=num; //返回数组 return p; } //快速排序 void* quickSort(int *num,int NN) { } //显示调用排序方法后的数组 void* show(int num[],int NN,int(*p)(int num[],int NN)) //指向数组的指针,和指向函数的指针 { return p(num, NN); }

int main(int argc, const char * argv[]) { // printf("您想要排序几个数:"); // scanf("%d",&N); printf("输入您要排序的%d个数(例如:1 3 2 4)\n",N); int num
; for (int i=0; i<N; i++) { scanf("%d",&num[i]); } printf("您输入的数组是:"); for (int i=0; i<N; i++) { printf("%d ",num[i]); } printf("\n"); //冒泡排序 /* for (int i=0; i<N-1; i++) { //排序N-1次 for (int j=0; j<N-1-i; j++) { //每次都从第一个一次往后面的比,大的排在后面,但后面已经排序好了的就不需要比了 if (num[j]>num[j+1]) { num[j]=num[j]^num[j+1]; num[j+1]=num[j]^num[j+1]; num[j]=num[j]^num[j+1]; } } } */ show(num,N, bubbleSort); //使用委托,调用外部函数,但数组是地址传递,不是值传递,所以在外面函数将main函数中的数组作为参数传递的时候,改变参数中的数组中的值,实际上就改变了数组中的值 printf("冒泡排序后的数组是:"); for (int i=0; i<N; i++) { printf("%d ",num[i]); } //快速排序 }

指针必须先指向一个变量,然后才能对他赋值,不然很危险! 指针可以实现多个返回值,只是函数的参数会比较多 指针遍历数组 char a[] = "dxw";//定义的是一个字符串变量,可以改变 char *p = "dxw" ; // 定义的是一个字符串常量!严格来说,应该写成const char* p = "dxw";前面加常量修饰符 //通过指针来遍历数组 char a[]="dingxiaowei" char *p=a; for(;*p!='\0';p++) { printf("%c",*p); }
简易计算器 指向函数的指针,函数名就代表函数的地址,就像数组名就代表数组地址 // // main.c // test1 // // Created by 丁小未 on 13-7-10. // Copyright (c) 2013年 dingxiaowei. All rights reserved. //
#include <stdio.h>
int sum(int a,int b) { int c = a + b; printf("%d + %d = %d",a,b,c); return c; }
int minus(int a,int b) { int c = a - b; printf("%d - %d = %d",a,b,c); return c; }
int mul(int a,int b) { int c = a * b; printf("%d * %d = %d",a,b,c); return c; }
int div(int a,int b) { int c = a / b; printf("%d / %d = %d",a,b,c); return c; } //count函数是用来做a跟b之间的运算 //至于做什么运算取决于p int count(int a,int b,int(*p)(int ,int)) { return p(a,b); }
int main(int argc, constchar * argv[]) { //int result = count(5, 6,sum); //printf("result:%d",result); /* //定义了一个指向函数的指针变量p //被p指向的函数:返回值为int类型,结婚搜两个int类型的参数 int (*p)(int a,int b); //让指针变量p指向sum函数 p = sum; //利用指针变量p简介调用sum函数 //(*p)(5,6); //这样也可以 p(5,6); */ int a,b,c,fuhao; char flag='y'; printf("******欢迎进入四则运算********\n"); do { printf("请输入功能(1.加法;2.减法;3.乘法;4.乘法),以及输入两个运算数[例如想计算1+2:就输入1 1 2]:"); scanf("%d %d %d",&fuhao,&a,&b); switch (fuhao) { case1: count(a, b, sum); break; case2: count(a, b, minus); break; case3: count(a, b, mul); break; case4: count(a, b, div); break; default: printf("您输入的不正确,请重新选择功能!"); break; } printf("\n您想继续吗?(y/n)\n"); flag = getchar(); flag = getchar(); //scanf("%c",&flag); }while ('y'==flag);
return0; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐