【C语言】好题分享(2)

目录

一:转移表 —— 计算器的一般实现

我们来分析

代码实现

二:字符串旋转

我们来分析

代码实现

结语


一:转移表 —— 计算器的一般实现

题目:使用函数指针数组的实现简单的加减乘除计算器

我们来分析

  • 计算器要能够实现加减乘除四种功能,故得分别写出四个函数
  • 函数指针数组则可以用来存放四个函数,通过数组就能更加方便调用函数

代码实现

#include 

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;
}

运行结果如下:

【C语言】好题分享(2)_第1张图片    【C语言】好题分享(2)_第2张图片

二:字符串旋转

题目:判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串
例如:给定 s1 =AABCD 和 s2 = BCDAA,返回1。给定 s1 = abcd 和 s2 = ACBD,返回0
           AABCD 左旋一个字符得到 ABCDA

           AABCD 左旋两个字符得到 BCDAA

           AABCD 右旋一个字符得到 DAABC

我们来分析

  • 我们可以把字符串 s1 与它自己拼接起来,等到一个全新的字符串 s3,而 s3 中就包含了左旋或右旋的全部可能
  • 此时我们就可以拿 s2 和 s3 比对,得出结果
  • 我们可以使用字符串函数来让代码实现更加简单

代码实现

#include 
#include 

char* Judgment_strings(char* ch1, char* ch2)
{
	char* p1[20] = { 0 };
    // 拷贝: p1 -> AABCD
	strcpy(p1, ch1);
	// 追加: p1 -> AABCDAABCD
	strcat(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;
}

结语

在好题分享系列中,我会持续输出一些优质经典的题目,若有出现纰漏,希望大佬们看到错误之后能够在私信或评论区指正,博主会及时改正,共同进步!也欢迎各位在评论区友好讨论。如果觉得不错的话,麻烦您点个赞吧,十分感谢!

你可能感兴趣的:(c语言)