C/C++ 字串比較的3種方法

本篇 ShengYu 介紹 C/C++ 字串比較的3種方法,寫程式中字串比較是基本功夫,而且也蠻常會用到的,所以這邊紀錄我曾經用過與所知道的字串比較的幾種方式,
以下為 C/C++ 字串比較的內容章節,

  • C 語言的 strcmp
  • C++ string 的 compare()
  • C++ string 的 == operator

那我們就開始吧!

C 語言的 strcmp

C 語言要判斷 c-style 字串是否相等通常會使用 strcmp,要使用 strcmp 的話需要引入的標頭檔 <string.h>
strcmp 函式原型為

1
int strcmp(const char * str1, const char * str2);

strcmp() 如果判斷兩字串相等的話會回傳 0,這必須牢記因為很容易混搖,很多程式 bug 就是這樣產生的,來看看下面的 strcmp 用法範例吧!

cpp-string-compare.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// g++ cpp-string-compare.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
const char *str1 = "hello world";
const char *str2 = "hello world";

if (strcmp(str1, str2) == 0) {
printf("equal\n");
} else {
printf("not equal\n");
}

return 0;
}

結果如下,

1
equal

再來看看字串不相等的例子,strcmp 是大小寫都判斷不同的,

cpp-string-compare2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// g++ cpp-string-compare2.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
const char *str1 = "hello world";
const char *str2 = "Hello World";

if (strcmp(str1, str2) == 0) {
printf("equal\n");
} else {
printf("not equal\n");
}

return 0;
}

結果如下,

1
not equal

注意唷!if (strcmp(str1, str2)) printf("not equal\n"); 這樣是不相等唷!
如果要用 strcmp 來判斷 std::string 的話可以這樣寫,

1
2
3
4
5
string str1 = "hello world";
string str2 = "hello world";
if (strcmp(str1.c_str(), str2.c_str()) == 0) {
printf("equal\n");
}

不過比較 std::string 應該很少這樣寫,除非是什麼特殊情形,否則我們都會使用下列介紹的兩種方式,

C++ string 的 compare()

這邊介紹 C++ string 的 compare()string::compare() 可以跟 std::string 做判斷以外也可以跟 c-style 字串作判斷,
string::compare() 判斷字串相等的話會回傳 0,

cpp-string-compare3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// g++ cpp-string-compare3.cpp -o a.out
#include <iostream>
#include <string>
using namespace std;

int main() {
string str1 = "hello world";
string str2("hello world");

if (str1.compare("Hello World") == 0) {
cout << "equal\n";
} else {
cout << "not equal\n";
}

if (str1.compare(str2) == 0) {
cout << "equal\n";
} else {
cout << "not equal\n";
}

return 0;
}

結果如下,第一組判斷出大小寫不相同所以印出 not equal,

1
2
not equal
equal

C++ string 的 == operator

最後要介紹的是 C++ string 的 == operator,也算是最直覺的一種寫法,直接用 == 來判斷兩字串是否相等,其他很多程式語言也都是這樣寫的,所以這寫法可以說是最直覺了,這邊同時也一起示範 != 的方式,

cpp-string-compare4.cpp
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
27
28
29
30
31
32
33
34
35
36
37
// g++ cpp-string-compare4.cpp -o a.out
#include <iostream>
#include <string>
using namespace std;

int main() {
string str1 = "hello world";
string str2("hello world");

// ==
if (str1 == "Hello World") {
cout << "equal\n";
} else {
cout << "not equal\n";
}

if (str1 == str2) {
cout << "equal\n";
} else {
cout << "not equal\n";
}

// !=
if (str1 != "Hello World") {
cout << "equal\n";
} else {
cout << "not equal\n";
}

if (str1 != str2) {
cout << "equal\n";
} else {
cout << "not equal\n";
}

return 0;
}

結果如下,

1
2
3
4
not equal
equal
equal
not equal

以上就是 C/C++ 字串比較的3種方法介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
strcmp - C++ Reference
https://www.cplusplus.com/reference/cstring/strcmp/

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ 字串連接的3種方法
C/C++ 字串搜尋的3種方法
C/C++ 字串分割的3種方法