strstr(T,S) 函數:
這是一個字符串處理函數,用於判斷字符串S是否是字符串T的子串。如果是,則該函數返回S在T中首次出現的地址;否則,返回NULL。
頭文件:#include <string.h>
函數原型:char *strstr(const char *str1, const char *str2);
返回值:(1) 成功找到,返回在父串中第一次出現的位置的 char *指針 (2) 若未找到,即不存在這樣的子串,返回 NULL。
#include<iostream> #include<cstring>//頭文件 using namespace std; int main() { char T[20],S[20]; cin>>T; while(1){ cin>>S; if(strstr(T,S)) cout<<"YES"<<' ',//S為父串T的子串 cout<<strstr(T,S)-T<<' ',//返回子串S在父串T中首次出現的下標位置 cout<<strstr(T,S)<<endl;//返回父串S中從子串T開始出現的字符串 else cout<<"NO"<<endl;//S不為父串T的子串 } return 0; }
運行結果如下:
如果用string類的字符串,需要先用c_str()函數把sring轉化為char*。
#include<iostream> #include<cstring> using namespace std; int main() { string T,S; cin>>T; while(1) { cin>>S; if(strstr(T.c_str(),S.c_str())) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
關於c_str()函數:
函數c_str()就是將C++的string轉化為C的字符串數組,c_str()生成一個const char *指針,指向字符串的首地址。
char q[20];
string S="1234";
strcpy(q,S.c_str());
這樣才不會出錯,c_str()返回的是一個臨時指針,不能對其進行操作。
語法: const char *c_str();
c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同.,這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。
注意:一定要使用strcpy()函數等來操作c_str()返回的指針。
(以上摘自百度知道)