本篇 ShengYu 介紹 C/C++ 字串搜尋的3種方法,字串處理中字串搜尋是很常被使用的功能,例如:在檔案內容裡搜尋某個字串,瀏覽器上搜尋字串、文字編輯器上搜尋字串等等都是這個的應用,可見字串搜尋這功能多麼地頻繁與實用呀!在寫程式中字串搜尋是基本功夫,而且也蠻常會用到的,這邊紀錄我曾經用過與所知道的字串搜尋的幾種方式,
以下為 C/C++ 字串搜尋的內容章節,
- C 語言的 strstr
- C 語言的 strchr
- C++ string 的 find()
那我們就開始吧!
C 語言的 strstr
C 語言要搜尋字串通常會使用 strstr,要使用 strstr 的話需要引入的標頭檔 <string.h>
,
strstr 函式原型為1
char * strstr(char * str1, const char * str2);
strstr()
會將 str1 字串搜尋 str2 字串,有找到會回傳指向 str1 的指標並且指向第一次符合的位置,沒找到會回傳 NULL,來看看下面的 strstr 用法範例吧!1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// g++ cpp-string-find.cpp -o a.out
int main() {
char str[] ="This is a c-style string";
char *pch;
pch = strstr(str, "c-style");
if (pch != NULL)
printf("found: %s\n", pch);
else
printf("not found\n");
return 0;
}
結果如下,1
found: c-style string
C 語言的 strchr
C 語言要在字串裡搜尋字元的話,除了自己寫迴圈處理外,也可以使用 C 語言提供的 strchr,
以下示範在字串裡搜尋 t 這個字元,第一次有成功找到,下一次要在搜尋時可以在找到的地方 pch+1
再往後搜尋,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// g++ cpp-string-find2.cpp -o a.out
int main() {
char str[] ="This is a c-style string";
char *pch;
// find first t
pch = strchr(str, 't');
if (pch != NULL)
printf("found at %d\n", pch-str+1);
// find second t
pch = strchr(pch+1, 't');
if (pch != NULL)
printf("found at %d\n", pch-str+1);
return 0;
}
結果輸出如下,1
2found at 14
found at 20
如果是使用 std::string 的話,在字串搜尋上就有一些方便的成員函式可以使用,以下介紹 C++ std::string 字串搜尋的方式,
C++ string 的 find()
這邊介紹 C++ string 的 find()
,std::string 使用 find()
可以搜尋字串,有找到會回傳找到的位置,沒找到會回傳 string::npos,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// g++ cpp-string-find3.cpp -o a.out
using namespace std;
int main() {
string str = "This is a c++ string";
str.find("is");
size_t found = str.find("is");
if (found != string::npos) {
cout << "found at " << found << "\n";
}
return 0;
}
結果如下,1
found at 2
其它參考
strstr - C++ Reference
https://www.cplusplus.com/reference/cstring/strstr/
strchr - C++ Reference
https://www.cplusplus.com/reference/cstring/strchr/
string::find - C++ Reference
https://www.cplusplus.com/reference/string/string/find/
其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ 字串比較的3種方法
C/C++ 字串連接的3種方法
C/C++ 字串分割的3種方法
std::find 用法與範例