题8.17:写一函数,实现两个字符串的比较。即自己写一个strcmp函数, 函数原型为int strcmp(char* p1, char* p2); 设p1指向字符串s1, p2指向字符串s2。要求当

本文介绍了如何使用C语言手动实现字符串比较函数。通过详细解释和示例代码,展示了如何根据ASCII码比较两个字符串,并返回相应的比较结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

本题是谭浩强《C程序设计课后习题》题8.17。
题目:
17. 写一函数,实现两个字符串的比较。即自己写一个strcmp函数, 函数原型为int
strcmp(char* p1, char* p2); 设p1指向字符串s1, p2指向字符串s2。要求当
s1 = s2时, 返回值为0; 若s1≠s2, 返回它们二者第1个不同字符的ASCII码差值
(如"BOY"与"BAD", 第2个字母不同, 0与A之差为79 - 65 = 14)。如果s1 > s2, 则输出正
值; 如果s1 < s2, 则输出负值。


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj

一、解题思路

思路:
采用指针对整形数组首部和尾部逐个交换的算法,循环条件为star<end。

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

int mystrcmp(char* s1[], char* s2[])
{
	int ret;
	char* p1 = s1;
	char* p2 = s2;
	while (*p1 && *p2)
	{
		if (*p1!=*p2)
		{
			ret = *p1 - *p2;//用于接收差值
			break;//因为已经比较出不同了,所以可以直接退出
		}
		p1++; p2++;
	}
	if (*p1 == '\0' || *p2 == '\0')//此条语句用于针对两个字符串前半部分全部一样的情况下,从末尾进行判断,比如ab和abc。
		ret = *p1 - *p2;
	return ret;
}
int main()
{
	char s1[32] = { 0 }, s2[32] = { 0 };
	printf("请输入两个字符串:\n");
	gets(s1);
	gets(s2);
	printf("字符串比较的结果为:%d", mystrcmp(s1, s2));
	return 0;
}

三、执行结果

在这里插入图片描述

输出:

请输入两个字符串:
a
ab
字符串比较的结果为:-98
为了编一个简单的字符数组字符串比较函数 `StrCmp`,我们可以遍历两个字符串,逐个字符地进行比较,直到找到不相等的字符或者到达字符串结尾。下面是一个基本的 C 语言实现: ```c #include <stdio.h> #include <string.h> // 定义字符数组字符串比较函数 int StrCmp(char *s1, char *s2) { while (*s1 != '\0' && *s2 != '\0') { // 遍历字符串,直到遇到空字符 if (*s1 > *s2) { // 如果第一个字符大于第二个字符 return 1; // 返回 1 表示 s1 比 s2 大 } else if (*s1 < *s2) { // 否则如果第一个字符小于第二个字符 return -1; // 返回 -1 表示 s1 比 s2 小 } s1++; // 移动到下一个字符 s2++; } // 如果所有字符都相等,但其中一个字符串先结束,则另一个更长 if (*s1 == '\0' && *s2 != '\0') { return -1; } else if (*s1 != '\0' && *s2 == '\0') { return 1; } else { return 0; // 所有字符都相等,返回 0 } } int main() { char S1[100], S2[100]; printf("请输入字符串 S1:"); fgets(S1, sizeof(S1), stdin); // 防止换行符 S1[strcspn(S1, "\n")] = '\0'; // 去除换行符 printf("请输入字符串 S2:"); fgets(S2, sizeof(S2), stdin); S2[strcspn(S2, "\n")] = '\0'; // 去除换行符 int result = StrCmp(S1, S2); switch (result) { case -1: printf("S1 小于 S2\n"); break; case 1: printf("S1 大于 S2\n"); break; default: printf("S1 等于 S2\n"); } return 0; } ``` 在这个程序中,用户首先在主函数中输入两个字符串 S1 和 S2,然后调用 `StrCmp` 函数进行比较,并根据比较结果输出相应的信息。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值