题目描述:
编写一个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都一样//字母的asciiif (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);
}