迭代行中的每个单词(字符串)c ++

时间:2017-06-18 00:21:30

标签: c++ string file

基本上我想要实现的是我有一个文本文件,我必须找到一个特定的单词以及位置(行的位置和单词在该行的位置)。如何使用C ++的基本知识实现...我是一个新手,没有学习矢量等。谢谢你的帮助

fstream x;
x.open("file.txt);
while(getline(x,str)) {
    //extract word from str and save in str1
    if(reqWord == str1)
        print("match found");
}`

2 个答案:

答案 0 :(得分:1)

这是一种高级技巧,但我建议您尝试stringstream

std::stringstream ss;
ss << str;

while(ss >> str1)
  ...

答案 1 :(得分:1)

您可以使用find来搜索特定搜索字词。它将返回第一次出现的位置,否则npos如果它不在当前行上。 请在下面找到一个工作示例:

已编辑 - 使用带有字边界的正则表达式

#include <iostream>
#include <fstream>
#include <regex>

int main() {

    std::cout << "Please input the file path" << std::endl;

    std::string path;

    std::cin >> path;

    std::ifstream file(path.c_str());

    if (file.is_open()) {
        std::string search;

        std::cout << "Please input the search term" << std::endl;
        std::cin >> search;

        std::regex rx("\\b" + search + "\\b");

        int line_no = 1;

        for (std::string line; std::getline(file, line); ++line_no) {
            std::smatch m;

            if (std::regex_search(line, m, rx)) {
                std::cout << "match 1: " << m.str() << '\n';
                std::cout << "Word " << search << " found at line: " << line_no << " position: " << m.position() + 1
                          << std::endl;
                break;
            }
        }
    } else {
        std::cerr << "File could not be opened." << std::endl;
        return 1;
    }

    return 0;
}