C++strstr()函数以及string,<string.h>,<cstring>的区别

关于strstr()函数

位于库文件cstring,而非string中,用法是:

str(str1,str2);

str1: 被查找目标 string expr;ession to search.

str2: 要查找对象 The string expression to find.

注意str1和str2都要是char*;

返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。

定义说的有点羞涩难懂。举个例子就知道了。
比如:
char str2 = “cdef”;
char str1 = “abcdefgh”;
则通过函数,将返回
strstr(str1,str2) = cdefgh;

如果str1不包含有str2。
char str2 = “cxef”;
char str1 = “abcdefgh”;
则通过函数,将返回
strstr(str1,str2) = NULL;


关于string与cstring,string.h的区别:

扫描二维码关注公众号,回复: 9964094 查看本文章

<string.h>
<string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。

<string>
<string>是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。


<cstring>
在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的,这就是<cstring>的来源,不要觉得又多了一个东西。相当于标准库组织给它盖了个章,说“你也是我的标准程序库的一份子了”。


#include <iostream>
#include <cstring> //必须是cstring 
using namespace std;
const int N=100;
void mystrlwr(char *ps)
{
    while(*ps)
    {
        if('A'<=*ps && *ps<='Z')
            *ps+=32;
        ps++;
    }
}
int main()
{
    char key[N+1],s[N+1],lowerkey[N+1],lowers[N+1];
    int option,n;
    cin>>key>>option>>n;
    strcpy(lowerkey,key);
    mystrlwr(lowerkey);
    for(int i=0;i<=n;i++)
    {
        cin>>s;
        if(option==0)
        {
            strcpy(lowers,s);
            mystrlwr(lowers);
            if(strstr(lowers,lowerkey))
            cout<<s<<endl;
        }
        else{
            if(strstr(s,key))
            cout<<s<<endl;
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/awangkuo/p/12524763.html