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

Posted

技术标签:

【中文标题】迭代一行中的每个单词(字符串)c ++【英文标题】:iterating each word in a line(string) c++ 【发布时间】:2017-06-18 00:21:30 【问题描述】:

所以基本上我想要实现的是我有一个文本文件,我必须找到一个特定的单词以及位置(行的位置和单词在该行的位置)。如何使用 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");
`

【问题讨论】:

您遇到了哪些问题?匹配单词?确定行号?确定行中的位置?我会逐行阅读文本,同时记录阅读的行数。使用string::find() 检查每一行,它还返回字符串开始的位置。 查找行中的单词以及行中的位置...嗯,行位置很容易找出...但是找到单词在行中的位置 【参考方案1】:

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

std::stringstream ss;
ss << str;

while(ss >> str1)
  ...

【讨论】:

【参考方案2】:

您可以使用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;

【讨论】:

非常感谢 :) 这不会只找到 OP 请求的单词,而是任何子字符串匹配。 我已编辑答案以解决@zett42 指出的问题

以上是关于迭代一行中的每个单词(字符串)c ++的主要内容,如果未能解决你的问题,请参考以下文章

c语言:输入一行英文字符串,把每个单词第一个字母变为大写,输出修改后的字符串

c语言:输入一行字符,统计其中的单词个数,单词之间用空格分开

C语言实现字符串单词反转

C语言,输入一行文字,单词间以空格分隔,然后分离其中的单词按每行一个单词输出,程序有了,求解释

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开