字串比較
strcmp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
字串相等傳回0
str1字元>str2字元 return 1
str1字元<str2字元 return -1
**/
int mystrcmp(const char* str1,const char* str2) {
//特別注意,使用while(true),即便str1或str2是\0也能比較
while(true){
//str1字元>str2字元
if(*str1 > *str2) return 1;
//str1字元<str2字元
if(*str1 < *str2) return -1;
//二個字元結尾相等
if(*str1 == 0 && *str2 == 0) return 0;
//比較下一個字元
str1++;
str2++;
}
}
int main() {
cout << mystrcmp("abc","abcd") << endl;
cout << mystrcmp("ab","a") << endl;
cout << mystrcmp("abc","abc") << endl;
cout << mystrcmp("","a") << endl;
return 0;
}
-1
1
0
-1
strncmp
int mystrncmp(const char* str1,const char* str2,const size_t n)
第一個參數是比較字串1。
第二個參數是比較字串2。
第三個參數n是要比較多少字元,若n為2,比較字串1與字串2前2個字元。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int mystrncmp(const char* str1,const char* str2,const size_t n) {
int i = 0;
while(i < n){
//str1字元>str2字元
if(*str1 > *str2) return 1;
//str1字元<str2字元
if(*str1 < *str2) return -1;
//二個字元結尾相等
if(*str1 == 0 && *str2 == 0) return 0;
//比較下一個字元
str1++;
str2++;
i++;
}
//比較n次仍比較不出來,就傳回0
return 0;
}
int main() {
cout << mystrncmp("abc","abcd",2) << endl;
cout << mystrncmp("ab","a",2) << endl;
cout << mystrncmp("abc","abc",2) << endl;
return 0;
}
0
1
0