如何在文件中找到一个由2个单词组成的字符串
How to find a string of 2 words in a file?
使用以下代码,我可以找到一个由1个单词组成的字符串(在本例中,我正在寻找"word"):
ifstream file("file.txt");
string str;
while (file >> str){
if (str.find("Word") != string::npos){
////
}
}
但如果我想找到,例如,"电脑屏幕",它是不起作用的,它是由两个单词组成的。
感谢
ifstream file("file.txt");
string str;
while (std::getline (file,str)){
if (str.find("Computer screen") != string::npos){
////
}
}
如果你知道有两个单词以及它们是什么,你只需要这个:
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;
}
所有这些都假设字符串中单词之间可能的空白是单个空格或换行符。如果有一个换行符有更多的空白(例如制表符),您需要用空白的正则表达式替换搜索字符串中的空白,或者实现一个更复杂的状态机
此外,考虑是否需要管理大小写,可能是在匹配之前将所有字符串转换为小写。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 我需要将多个函数组合为一个函数
- 获取向量C++中第一个值和最后一个值的和
- 在多个核心中处理一个HTTP请求
- 从多个源构造一个对象,包括一个对象向量
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 将第一个n个字符复制到std :: string
- 如何得到一个两个数字都相等或这个数字更大
- 如何使函数一次使用一个 3 个不同的变量