字串比較

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

results matching ""

    No results matching ""