目录
一:转移表 —— 计算器的一般实现
我们来分析
代码实现
二:字符串旋转
我们来分析
代码实现
结语
一:转移表 —— 计算器的一般实现
题目:使用函数指针数组的实现简单的加减乘除计算器
我们来分析
- 计算器要能够实现加减乘除四种功能,故得分别写出四个函数
- 函数指针数组则可以用来存放四个函数,通过数组就能更加方便调用函数
代码实现
#include <stdio.h>int add(int a, int b)
{return a + b;
}int sub(int a, int b)
{return a - b;
}int mul(int a, int b)
{return a * b;
}int div(int a, int b)
{return a / b;
}int main()
{int input = 1;int x, y;int ret;// 创建函数指针数组int(*p[5])(int x, int y) = { 0,add,sub,mul,div };do {printf("======================\n");printf("== 1.add 2.sub ==\n");printf("== 3.mul 4.div ==\n");printf("======= 0.exit =======\n");printf("请选择:");scanf("%d", &input);if ((input >= 1) && (input <= 4)){printf("请输入两个数:");scanf("%d %d", &x, &y);ret = (*p[input])(x, y);printf("结果为:%d\n", ret);printf("\n");}else if (input == 0){printf("退出计算器\n");}else{printf("输入有误\n");printf("\n");}} while (input);return 0;
}
运行结果如下:
二:字符串旋转
题目:判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串
例如:给定 s1 =AABCD 和 s2 = BCDAA,返回1。给定 s1 = abcd 和 s2 = ACBD,返回0
AABCD 左旋一个字符得到 ABCDAAABCD 左旋两个字符得到 BCDAA
AABCD 右旋一个字符得到 DAABC
我们来分析
- 我们可以把字符串 s1 与它自己拼接起来,等到一个全新的字符串 s3,而 s3 中就包含了左旋或右旋的全部可能
- 此时我们就可以拿 s2 和 s3 比对,得出结果
- 我们可以使用字符串函数来让代码实现更加简单
代码实现
#include <stdio.h>
#include <string.h>char* Judgment_strings(char* ch1, char* ch2)
{char* p1[20] = { 0 };// 拷贝: p1 -> AABCDstrcpy(p1, ch1);// 追加: p1 -> AABCDAABCDstrcat(p1, ch1);// 寻找:找到了就返回该位置的字符串,没找到就返回空指针char* p2 = strstr(p1, ch2);return p2;
}int main()
{char s1[] = "AABCD";char s2[] = "DAABC";char* s3 = Judgment_strings(s1, s2);// 判断if (s3 != NULL){printf("yessss\n");}else{printf("nooooo\n");}return 0;
}
结语
在好题分享系列中,我会持续输出一些优质经典的题目,若有出现纰漏,希望大佬们看到错误之后能够在私信或评论区指正,博主会及时改正,共同进步!也欢迎各位在评论区友好讨论。如果觉得不错的话,麻烦您点个赞吧,十分感谢!