1. 程式人生 > 實用技巧 >寫一函式,實現兩個字串的比較。即自己寫一個strcmp函式,函式原型為int strcmp(char * p1 ,char * p2); 設p1指向字串s1, p2指向字串s2。要求當s1=s2時,返回值為0;若s1≠s2,返回它們二者第1個不同字元的ASCII碼差值(如"BOY"與"BAD"

寫一函式,實現兩個字串的比較。即自己寫一個strcmp函式,函式原型為int strcmp(char * p1 ,char * p2); 設p1指向字串s1, p2指向字串s2。要求當s1=s2時,返回值為0;若s1≠s2,返回它們二者第1個不同字元的ASCII碼差值(如"BOY"與"BAD"

寫一函式,實現兩個字串的比較。即自己寫一個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,則輸出負值。

解題思路: 使用兩個指標指向兩個字串首部,逐個往後進行比較,不相等的時候則將資料進行相減,作為返回值。

答案:

#include<stdio.h>
#include<string.h>

int mystrcmp(char *str1, char *str2)
{
	char *ptr1 = str1;
	char *ptr2 = str2;
	int res;
	while (*ptr1 != '\0' && *ptr2 != '\0') {
		if (*ptr1 != *ptr2) {
			res = *ptr1 - *ptr2;
			break;
		}
		ptr1++;
		ptr2++;
	}
	if (*ptr1 == '\0' || *ptr2 == '\0') {//注意一個字串到達結尾或者兩個都到達結尾的情況
		res = *ptr1 - *ptr2;
	}
	return res;
}
int main()
{
	char buf1[1024] = { 0 };
	char buf2[1024] = { 0 };
	while (1) {
		printf("Please enter two strings:\n");
		gets_s(buf1, 1024);
		gets_s(buf2, 1024);
		printf("mystrcmp:%d", mystrcmp(buf1, buf2));
		printf("\n");
	}
	system("pause");
	return 0;
}