寫一函式,實現兩個字串的比較。即自己寫一個strcmp函式,函式原型為int strcmp(char * p1 ,char * p2); 設p1指向字串s1, p2指向字串s2。要求當s1=s2時,返回值為0;若s1≠s2,返回它們二者第1個不同字元的ASCII碼差值(如"BOY"與"BAD"
阿新 • • 發佈:2020-07-13
寫一函式,實現兩個字串的比較。即自己寫一個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; }