编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s

题目描述

编写一个C程序,实现以下功能:
用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:
int strcmp(char *p1,char *p2);
设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为0;
 如果s1≠s2,返回它们二者第一个不相同字符的ASCII码差值
 (如“BOY”与“BAD”,第二个字母不相同,“O”与“A”之差为79-65=14);
 如果s1>S2,则输出正值;如s1<s2则输出负值。

思维难点

1.怎么判断字符串是否相等,字符串相等的条件是什么?

2.如何去找到第一个不同的字符,并且返回ascii值?

思路:

首先定义两个数组,目标数组(输入终端的英文句子)要求数组(要求的单词)

1.字符串相等的条件:1).字符串长度相同。2).所有字符字母相同,大小写不同也不行。

怎么去寻找:通过两个指针,指向两个数组的首地址。检索目标数组的所有元素,与要求数组的第一个元素进行比较,如果存在相同元素,要求数组的指针进一,移到下一位。

2.通过1的思路,两个指针,在while循环里面进行判断两个数组是否存在相同的元素。如果没有,根据之前学过ascii值的知识,只要用两个字符相减并返回,再用%d来打印就ok。

答案如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#define MAX 500
/*编写一个C程序,实现以下功能:
用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:
int strcmp(char *p1,char *p2);
设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为0;
 如果s1≠s2,返回它们二者第一个不相同字符的ASCII码差值
 (如“BOY”与“BAD”,第二个字母不相同,“O”与“A”之差为79-65=14);
 如果s1>S2,则输出正值;如s1<s2则输出负值。
*/

int strcmp(char* p1, char* p2) {
	int max = strlen(p1) > strlen(p2) ? strlen(p1) : strlen(p2);
	int min = strlen(p1) + strlen(p2) - max;
	int p;
	p = 0;
	//长度
	if (strlen(p1) == strlen(p2))
	{
		for (int i = 0; i < max; i++) {//这里用max还是min还是strlen都一样
			//字母的ascii
			if (p1[p] != p2[p])
				return (p1[p] - p2[p]);
			else {
				p++;
			}
		}
		return 0;
	}
	else
	{
		while (p != min) {
			if (p1[p] != p2[p])
				return p1[p] - p2[p];
			p++;
		}
	}
}
int main() {
	char str01[MAX], str02[MAX];
	gets(str01);
	gets(str02);
	char tmp = strcmp(str01,str02);
	printf("%d", tmp);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值