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拷贝到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[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;

}

2013年07月10日 - 蓬莱仙羽 - IT达人的博客

 
















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366446,如需转载请自行联系原作者

相关文章
|
8月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
413 2
|
存储 C语言
指针的函数传参的详细讲解(一)
本文介绍了计算机内存管理与C语言中指针的基本概念及应用。从内存单元的划分到指针的定义,解释了指针作为地址的作用及其数据类型特性。文章通过代码示例详细说明了一级指针、二级指针的使用方法,以及`void*`指针的特点和限制。此外,还探讨了指针运算规则、函数指针传参解引用的原理,并结合链表实例分析了一级与二级指针在实际场景中的区别。最后附带两道指针练习题,帮助读者巩固理解。
273 0
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
427 4
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
利用指针函数
【10月更文挑战第2天】利用指针函数。
170 1
|
算法 搜索推荐 C语言
【C语言篇】深入理解指针4(模拟实现qsort函数)
【C语言篇】深入理解指针4(模拟实现qsort函数)
244 2
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
2006 13
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
905 4
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
277 0