【问题标题】:Find line by one word in vector在向量中逐行查找
【发布时间】:2017-10-04 18:32:15
【问题描述】:

试图在向量中逐字查找一行。

例如:

在一个文件中一些数据,比如:

ctrl+移动,查找

ctrl+c 复制,分组

ctrl+z 获取,给予

所有字母都很小。

然后我尝试读取向量中的文件 - 没关系

然后用户想输入:move

**我希望如果用户输入move,我会在向量中找到一行,其中包含单词move,然后对这一行执行一些操作。(例如:擦除)*

但是我做错了什么,因为我的循环在零处停止并且它只读取文件的第一个字符串?

代码如下:

void HotMap::test(std::string str)
{   
        std::string line;
        std::vector<std::string> vec_keys;
        std::string file_name_keys("read_keys.txt");
        std::ifstream file_keys(file_name_keys, std::ios::in);
        std::vector<std::string>::iterator iter_vec;


        while (std::getline(file_keys, line))
        {
            for (auto & c : line) c = tolower(c);
            vec_keys.push_back(line);
        }


        for (int i = 0; i < 3; i++)
        {
            vec_keys[i].find(str);
            if (vec_keys[i].find(str))
            {
                std::string found_str;
                std::cout << "Found:" << vec_keys[i];
                //Just help to find the line.....
                break;
            }
        }   
}

【问题讨论】:

  • 提示:vector::find 的返回类型是什么?
  • @tobi303 哦,是的,它是索引。但是你能帮助你走上正确的道路吗?
  • @tobi303 你的意思是string::find,对吧?

标签: c++ string file vector find


【解决方案1】:

阅读string::find的参考:

返回值

第一个匹配的第一个字符的位置。如果未找到匹配项,则该函数返回 string::npos

所以,试试这个吧:

if (vec_keys[i].find(str) != std::string::npos)
    std::cout << "Found:" << vec_keys[i];

【讨论】:

  • 我同意
  • @X21 因为它进入了 if 语句的主体,break 被执行。
  • @gsamaras 非常感谢!是的,我犯了所有的错误!谢谢你的帮助!!!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2011-10-12
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多