使用以下代码,我可以找到1个字的字符串(在本例中我正在寻找“Word”):
ifstream file("file.txt");
string str;
while (file >> str){
if (str.find("Word") != string::npos){
////
}
}
但如果我想找到一个由两个单词组成的“电脑屏幕”,它就不起作用。
由于
答案 0 :(得分:2)
file>> str读取用空格分隔的参数(在本例中为字符串)。如果要读取整行(或者在任何情况下,一次读取多个单词),可以使用getline运算符(默认情况下读取由换行符分隔的字符串)。
ifstream file("file.txt");
string str;
while (std::getline (file,str)){
if (str.find("Computer screen") != string::npos){
////
}
}
答案 1 :(得分:0)
如果您知道有两个单词及其内容,那么您只需要:
ifstream file("file.txt");
string str;
while (file >> str){
if (str.find("Computer") != string::npos){
file >> str;
if (str.find("screen") != string::npos) {
////
}
}
}
但更有可能的是,您要求找到可能为两个单词,或三个或更多单词的单个字符串。
然后,你可以依靠单行上的字符串吗?在这种情况下,@ Ashalynd的解决方案将起作用。但如果字符串可能被破坏,它将失败。然后你需要处理这种情况。
如果您的文件“小” - 即可以轻松放入内存,请读取整个内容,删除换行符并搜索字符串。
如果太大,请按行读取。
这样的事情:
std::ifstream file("file.txt");
std::string str[2];
int i = 0;
std::getline (file,str[i]);
++i;
while (std::getline (file,str[i]))
{
int next_i = (i+1)%2;
std::string pair = str[next_i] + " " + str[i];
if (pair.find("Computer screen") != std::string::npos)
{
////
}
i = next_i;
}
所有这些都假定字符串中单词之间可能的空格是单个空格或换行符。如果有一个包含更多空白区域的换行符(例如制表符,则需要将搜索字符串中的空格替换为白色空格的正则表达式,或者实现更复杂的状态机。
另外,考虑是否需要管理案例,可能是在匹配前将所有字符串转换为小写。