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


字符串处理函数
1.strlen函数

这个函数可以用来测量字符串的字符个数,不包括\0

int 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,-2

  • s1和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拷贝到deststrcat(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[N];

    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;

}

 

时间: 2024-09-20 17:43:17

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

《C和C++代码精粹》——2.12 指向函数的指针

2.12 指向函数的指针 C和C++代码精粹 一个指针可以指向函数也可以指向存储的对象.下面的语句声明fp是一个指向返回值为整型(int)的函数的指针: int(*fp)( ); *ftp的圆括号是必需的,没有它的语句 int *fp( ); 将fp声明为一个返回指向整型(int)指针的函数.这就是将星号与类型声明紧密相连的方式成为逐渐受人们欢迎的方式的原因之一. int fp(); //方式说明fp()返回一个指向整型的指针(int ) 当然,这种方式建议你通常应该每条语句只声明一个实体,否则

C++指向函数的指针实例解析_C 语言

通常来说C++函数指针是指指向函数的指针,而非指向对象的指针.就像其他指针一样,函数指针也指向某个特定的类型.函数类型由其返回类型以及形参表确定,而与函数名无关. 定义: char (*fP)(char,int); 赋值: char function(char i,int j) { } fp=function; 调用 (*fp)(10,100); type char (*FUN)(char,int);//类型定义 FUN fp ;//定义fp为指向函数的指针 volatile的用法和作用: co

C语言 函数指针(指向函数的指针)详解_C 语言

一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数.这种指针就是函数指针. 函数指针的定义形式为: returnType (*pointerName)(param list); returnType 为函数返回值类型,pointerNmae 为指针名称,param list 为函数参数列表.参数列表中

函数指针 c语言 指针-C语言指向函数的指针的调用

问题描述 C语言指向函数的指针的调用 int *d_bubblesort(int a[]int n)//数组长度为n的冒泡降序排序{int ij;int temp;for(i=0;i {for(j=n-1;j>i;j--){if(a[j]>a[j-1]){temp=a[j-1];a[j-1]=a[j];a[j]=temp;} }}return(a);} void main(){int i;int *p;int a[10]={65412398710};int (*fun)(intint);fun

C++指向函数的指针用法详解_C 语言

本文以实例形式展示了C++指向函数的指针用法,是深入学习C++所必须掌握的关键知识点.分享给大家供大家参考之用.具体方法如下: 函数指针 现来看看以下声明语句,看看其含义: float (*h(int, void (*)(int)))(int); 以下是一个变量指针的定义语句: float* pf; 以下是一个普通函数的声明语句: float f(); 请看以下声明语句: float* g(); 因为()的优先级高于*, 所以相当于: float* (g()); g是一个函数, 返回值为floa

C++中返回指向函数的指针示例_C 语言

在C++中,函数的形参可以是指向函数的指针,函数也可以返回函数的指针.例如:int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参.使用typedef可使得定义更加易懂:typedef int (*PF) (int *,int);PF ff(int);下面给出一个例子: 复制代码 代码如下: #inclu

Java编程思想学习笔记——字符串

前言 字符串操作是计算机程序设计中最常见的行为. 不可变String String对象是不可变的 重载"+"与StringBuilder String对象是不可变的,可以给String对象加任意多得别名. String对象具有只读特性,所以指向它的任何引用都不可能改变它的值. String a = "a"; String b = a; System.out.println("first: a=" + a + " b=" + b

PHP学习:字符串操作入门教程

论哪种语言,字符串操作都是一个重要的基础,往往是简单而重要.正像人说话一样,一般有形体(图形界面),有语言(print 字符串?),显然字符串能解释更多的东西.PHP提供了大量的字符串操作函数,功能强大,使用也比较简单.以下将简单的讲述它的功能和特性. 弱类型 PHP是弱类型语言,所以其它类型的数据一般可以直接应用于字符串操作函数里,而自动转换成字符串类型,进行处理,如: echo substr("1234567", 1, 3); 和echo substr(123456,1, 3);

c++学习笔记之纯虚函数

首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数.1.简介假设我们有下面的类层次: [cpp] view plaincopy class A   {   public:       virtual void foo()       {           cout<<"