【C/C++】关于strstr函数和c_str()函数
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()返回的指针。
(以上摘自百度知道)