在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-hant/n/159388.html