文章目录
- 字符串
- 什么是字符串?
- 字符串和字符数组的联系及区别
- 字符串的操作
- 初始化字符串-memset
- 分析代码的问题
- 常见的字符串处理函数
- 函数指针
字符串
3、字符串的操作
问题纠正:
--------------------------------------------------------------------------------------------------------------------------------
常见的字符串处理函数
--------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
strcpy函数-代码演示:
--------------------------------------------------------------------------------------------------------------------------------
strncpy函数-代码演示:
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
//strtok分割函数:
#include <string.h>
#include <stdlib.h>
int main()
{
char data[] = {"##name=zhangsan;age=18;score=99.5##"};
//第一步用;分割 。然后指针会指向分割出来的字符(串)的首地址
char *p;
int n = 0; //用来记录循环次数
//在它拿到;前面的字符串时,他会用另一个(全局的)指针指向剩余字符串的首地址,以便我们后续的操作
p = strtok(data,";");
printf("%s\n",p);
//由于指针指向了字符串的首地址,所以我们用指针偏移的方法拿字符串:zhangsan
int len = strlen(p);
printf("%d\n",len); // 第一个分号前有15个字符
while (*p != '=' && n <= len) //为了确保指针,指向地址超过
{
p++;
n++; //先判断后递增,一共6次
printf("%d\n",n);
}
if (n <= len)
{
p++; //这里就是该字符串没有=号后的递增赋值操作
char name[10];
memset(name,0,10);
strcpy(name,p);
printf("name: %s\n",name);
}
/*
//第二次对剩下的数据使用;分割
p = strtok(NULL,";");
printf("%s\n",p);
len = strlen(p);
n = 0;
while (*p != '=' && n <= len)
{
p++;
n++;
}
if (n <= len) {
p++;
int age = atoi(p);
printf("age: %d\n", age);
}
//第三次
p = strtok(NULL,";");
printf("%s\n",p);
len = strlen(p);
n = 0;
while (*p != '=' && n <= len)
{
p++;
n++;
}
if (n <= len) {
p++;
float score;
score = atof(p);
printf("score: %f\n", score);
}
char name[10];
int age;
float score;
while (p = strtok(NULL,";"))
{
char *tmp = p;
printf("%s\n",p);
len = strlen(p);
n = 0;
//由于这里的指针p经过while循环已经指向了=号。然后会影响下面的两个条件判断"age="和"score="
//所以我们用另一个指针去指向
while (*p != '=' && n <= len)
{
p++;
n++;
}
if (n <=len)
{
p++;
if (strstr(tmp,"age=") != NULL)
{
age = atoi(p);
printf("age: %d\n",age);
} else if (strstr(tmp,"score=") != NULL)
{
score = atof(p);
printf("score: %f\n",score);
}
}
}
return 0;
}
*/
--------------------------------------------------------------------------------------
函数指针
int main() { #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> typedef int (*FUNC)(int, int); int max(int x, int y) { return x>y?x:y; } int add(int x, int y) { return x+y; } typedef void (*SKILL)(); //假设我开发了一个游戏,某个英雄有4个技能,每个技能的发射都是独立的函数(4个技能就有4个函数),我要随机的发动其中的一个技能 void skill1() { printf("skill1\n"); } void skill2() { printf("skill2\n"); } void skill3() { printf("skill3\n"); } void skill4() { printf("skill4\n"); } int main() { FUNC f; f = max; printf("%d\n", f(10, 20)); //max(10, 20); f = add; printf("%d\n", f(10, 20)); //s是个数组,是个函数指针数组,数组中的每个元素都是一个函数指针 SKILL s[4] = {skill1, skill2, skill3, skill4}; srand(time(NULL)); int n = rand()%4; //rand函数能够产生一个随机数 s[n](); return 0; } return 0; }
--------------------------------------------------------------------------------------------------------------------------------------------
笔试题
一个整型数 int a;
一个指向整型数的指针 int *p
一个指向指针的的指针,它指向的指针是指向一个整型数 int *p; //二级指针
一个有 10 个整型数的数组 int a[10];
一个有 10 个指针的数组,该指针是指向一个整型数的。本质是数组 int p[10];
一个指向有 10 个整型数数组的指针。本质:指 针, int (*p)[10]; //int[10] (*p)
一个指向函数的指针,该函数有一个整型参数并返回一个整型数 本质:指针 int (*p)(int); //p是指针变量 int(int) (*p); typedef int (*FUNC)(int); FUNC p;
一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。本质:数组,
int (*p[10])(int); // int(int) (*p[10]);
typedef int (*FUNC)(int);
FUNC f[10];