如何在C ++中找到一行包含反斜杠字符的字符串?

时间:2014-10-14 12:43:16

标签: c++ string visual-studio-2010 special-characters

我正在使用MSVS2010来编写C ++程序。我有一个值为HAI\HOW_ARE\YOU的字符串。我将它存储在文件的字符串中(使用istringstream读取)。现在,我打开另一个文件,我必须检查任何行中是否存在相同的字符串。我使用了以下代码:

while(!file.eof())
{
    getline(file,line_read);
    if(line_read.find(search_word)!=string::npos) // search_word = "HAI\HOW_ARE\YOU"
            break;
    else 
        getline(file,readline);// skip a line
}

但即使line_read包含search_word,控件也会转到其他部分。我知道这是由于字符串中的\字符,因为以下代码有效:

while(!file.eof())
{
    getline(file,line_read);
    if(line_read.find("HAI\\HOW_ARE\\YOU")!=string::npos) \\ included double slash
            break;
    else 
        getline(file,readline);// skip a line
}

所以我尝试使用Replace double slashes to four slashes\替换为\\。但它也将控制权交给else部分。

我无法通过手动输入字符串找到,因为我必须以这种方式比较很多字符串。有什么方法可以解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果字符串已从文件中读取,则不需要用双反斜杠替换反斜杠。

您只使用\\来表示源文件中字符串中的单个反斜杠,以表示您的反斜杠是什么意思,而不是转义字符。

尝试运行以下代码,将查找字符串更改为查找字符串。

对我来说它打印了4行。

#include <string>
#include <fstream>
#include<iostream>
using namespace std;

string find_str; = "USB\\VID_04E8&PID_6860\\4df73c04056fbfa5";

int main()
{
    ifstream input("input.txt");
    ifstream fin("C:\\Windows\\Inf\\setupapi.dev.log");
    string line;
    while(std::getline(fin,line)){
        if(line.find(find_str)!=string::npos){
            cout<<line<<endl;
        }
    }
    return 0;
}

修改 如果我从文件中读取搜索字符串,它将如下所示:

#include <string>
#include <fstream>
#include<iostream>
using namespace std;

int main()
{
    ifstream input("input.txt");
    ifstream fin("C:\\Windows\\Inf\\setupapi.dev.log");
    string find_str;
    string line;
    input>>find_str;
    while(std::getline(fin,line)){
        if(line.find(find_str)!=string::npos){
            cout<<line<<endl;
        }
    }
    return 0;
}

如果input.txt文件是:

USB\VID_04E8&PID_6860\4df73c04056fbfa5 

我得到的结果相同。