注册 登录
编程论坛 C++教室

关于C++查找文本字符串的问题

ID不见了 发布于 2016-05-13 15:27, 4109 次点击
我想从已有文本中查找关键字,并输出该关键字所在的整行文字,为什么会出现这个错误啊?请问下这个错误是怎么回事啊啊?代码如下:
程序代码:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

int main()
{   
    ifstream ist("L:\\1.txt");
    if(!ist)
    {
        cout<<"打开失败..."<<endl;
        return 0;
    }
    string line;
    char *s;
    while(!ist.eof())
    {
        getline(ist,line);
        s=strstr(line,"22");
        if(s!=NULL)
        {
            cout<<line<<endl;
        }
    }
    ist.close();
    return 0;
}


这是错误信息:
L:\Microsoft Visual Studio\MyProjects\C++\yes\test.cpp(19) : error C2664: 'strstr' : cannot convert parameter 2 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
7 回复
#2
ID不见了2016-05-13 15:27
各位大神帮帮忙。。
#3
rjsp2016-05-13 15:55
s=strstr(line.c_str(),"22");
#4
rjsp2016-05-13 16:00
参考一下
程序代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main( void )
{  

    ifstream ist( "d:\\1.txt" );
    if( !ist )
    {
        cerr << "打开失败...\n";
        return 1;
    }

    for( string line; getline(ist,line); )
    {
        if( line.find("22") != string::npos )
            cout << line << '\n';
    }

    return 0;
}

#5
ID不见了2016-05-13 16:06
回复 3楼 rjsp
可以了,谢谢你啊。不过请问下这个c_str()有什么用?百度说转化成c风格的字符串,为什么要转化成这样呢,难道C++没有字符串的吗?...我是小白。。。
#6
rjsp2016-05-13 16:14
以下是引用ID不见了在2016-5-13 16:06:54的发言:

可以了,谢谢你啊。不过请问下这个c_str()有什么用?百度说转化成c风格的字符串,为什么要转化成这样呢,难道C++没有字符串的吗?...我是小白。。。
我不知道你说的什么“百度”,什么“c风格”是什么意思
我只知道 strstr 的函数原型是 char *strstr( const char* str, const char* strSearch );
而你的调用代码 strstr(line,"22") 中 line 是 std::string 类型,实参和形参的类型不一致。
#7
ID不见了2016-05-13 16:17
回复 4楼 rjsp
好的,谢谢
#8
ID不见了2016-05-13 16:21
回复 6楼 rjsp
好吧,那c_str()得到作用是将std::line转换成const *char str型吗?
1