【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()返回的指針。

(以上摘自百度知道)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM