在C++的字元串處理中,經常需要在一個字元串中查找特定的子串並返回其位置。其中,C++的字元串庫中自帶了一個函數叫做 “cstringfind” ,它的作用就是在源字元串中查找一個指定的字元串。本文將從以下幾個方面詳細介紹該函數的用法和注意事項。
一、字元串查找函數cstringfind
#include <iostream> #include <cstring> using namespace std; int main () { char str[] = "Hello world, I am learning C++ programming."; char *substr = "C++"; char *ptr; ptr = strstr(str, substr); if(ptr) { cout << "找到字元串 " << ptr << endl; } else { cout << "在字元串中未找到 " << ptr << endl; } return 0; }
上述代碼中使用了C++的“#include <cstring>” 頭文件,其中包含了用於處理C語言字元串字元的函數(例如:strlen、strcat)。函數strstr()是在源字元串中查找第一次出現指定的字元串的函數,該函數的返回值是指向查找到的子串第一次出現的地址。如果字元串未找到,函數返回 NULL。
二、找到字元串並列印其位置
接下來,我們將說明如何找到字元串並列印其位置。
#include <iostream> #include <cstring> using namespace std; int main () { char str[] = "Hello world, I am learning C++ programming."; char *substr = "C++"; char *ptr; ptr = strstr(str, substr); if(ptr) { cout << "找到字元串 " << substr << " 在 " << ptr - str + 1 << " 號位" << endl; } else { cout << "在字元串中未找到 " << substr << endl; } return 0; }
在這個例子中,語句 ptr – str + 1計算出C++子字元串的位置,以字元為單位。我們需要加1是為了從1開始計數而非從0開始計數。
三、查找多個重疊出現的字元串
現在假設我們需要查找多個重疊出現的字元串,怎麼辦?下面是C++代碼示例:
#include <iostream> #include <cstring> using namespace std; int main () { char str[] = "Hello world, I am learning C++ programming. C++ is a high-level programming language"; char *substr = "C++"; char *ptr; ptr = strstr(str, substr); while(ptr != NULL){ cout << "找到字元串 " << substr << " 在 " << ptr - str + 1 << " 號位" << endl; ptr = strstr(ptr+1, substr); } return 0; }
在這個例子中,我們使用了循環語句,每當我們找到一次子串出現時,就在下一個子串的起始點繼續搜索。這個過程一直進行到沒有子串出現為止。
四、注意事項
1、函數參數
在使用該函數時,我們需要了解以下兩個參數:源字元串和子字元串。
- 源字元串:即需要被查找的字元串。
- 子字元串:即需要查找的字元串。
2、返回值
在該函數執行後,它將返回指向子字元串首字元出現位置的指針,即找到的子字元串的起始位置。如果沒有找到子字元串,則該函數將返回空指針。
3、區分大小寫
這個函數是區分大小寫的。例如,在源字元串 “I am LEARNING C++ programing.” 中查找 “learning” 將返回 NULL,因為該函數區分大小寫。
4、指針運算
在上述程序中,我們的指針被使用了多次。它被初始化為 「strstr(str, substr)」 的返回值,並使用Arithmetic運算符(「+”)加上了1。必要時可以進行調整。使用指針是可以有效地改善字元串搜索的性能,但可能更容易出錯。使用指針之前最好弄清楚它們是如何工作的。
五、小結
本文詳細介紹了C++中的 “cstringfind” 函數及其使用方法。無論是查找一個指定的子串還是查找多個重疊出現的字元串,該函數都是非常常用的。但需要注意的是,該函數是區分大小寫的,使用指針時需要加倍小心。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/159388.html