我正在使用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
部分。
我无法通过手动输入字符串找到,因为我必须以这种方式比较很多字符串。有什么方法可以解决这个问题吗?
提前致谢。
答案 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
我得到的结果相同。