本篇 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 用法範例吧!1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// g++ cpp-string-compare.cpp -o a.out
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 是大小寫都判斷不同的,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// g++ cpp-string-compare2.cpp -o a.out
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
5string 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,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
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
2not equal
equal
C++ string 的 == operator
最後要介紹的是 C++ string 的 ==
operator,也算是最直覺的一種寫法,直接用 ==
來判斷兩字串是否相等,其他很多程式語言也都是這樣寫的,所以這寫法可以說是最直覺了,這邊同時也一起示範 !=
的方式,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
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
4not 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種方法