【问题标题】:How to check for keywords in a string c++如何检查字符串c ++中的关键字
【发布时间】:2018-02-18 02:33:54
【问题描述】:

我试图弄清楚如何检查字符串中的一些关键字。情况就是这样。我从文件中获取一行并将其保存到临时字符串中。我有一个字符串数组,其中包含我正在寻找的关键字类型。比如 begin 和 end 两个关键字,除了一堆 if 语句来检查每个字符,还有其他方法吗? 我的问题是我将为我拥有的每个关键字获得的 if 和 else 的数量,所以我想要一种更有效的方法 c++

【问题讨论】:

  • “我的问题是我会为我拥有的每个关键字获得的 if 和 else 的数量,所以我想要一种更有效的 C++ 方式”——打开你的 C++ 书到本章教你如何使用std::mapstd::unordered_map,阅读本章。
  • 您是否认为向我们展示您的代码会有所帮助?
  • @SamVarshavchik 我从未使用过 map 或 unordered_map,我会检查一下,谢谢,但这是我的总体目标。从此字符串“开始 int a = 0”。我想看看每个单词是否适合作为关键字,或者我会将其保存为标识符或运算符。所以我需要检查 b 然后 e, i g .... 直到我遇到空格或分隔符。如果它适合关键字,我将其保存为关键字,如果不只是作为标识符,因为最后它不像字符串的 find 有关键字,它是检查哪个单词是
  • 这种做法是错误的。这不是标记器或此类解析器通常的工作方式。解析非平凡结构的输入实际上是一个相当复杂的过程;而传统解决方案采用lexical analyzerrecursive descent parser。这是大学水平的计算机科学,因此,不能在 stackoverflow.com 上的几段中描述,尤其是对于没有必要背景知识的人。
  • 我是一名大学生,是编译器设计课。我们正在制作一个程序来模拟一个词法分析器,它正在读取一个输入文件,该文件是一个代码,然后在屏幕上将代码显示为一个令牌流。 我们正在模拟分析器,这就是为什么我们没有按应有的方式存储令牌。我试图找到一种方法来检查字符串中的字符以对其进行测试,然后深入研究主要目的。只是为它找到一个算法或语法。

标签: c++ string char keyword-search


【解决方案1】:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    std::string input{"apple double banana int float chimpanzee"};
    std::vector<std::string> keywords{"double", "int", "float", "switch"};

    for(const auto& keyword : keywords)
    {
        auto pos = input.find(keyword);

        std::cout << keyword
            << " [" << (pos == std::string::npos ? " not found" : " found") << "]\n";   
    }
    return 0;
}

【讨论】:

  • O(n)。考虑到对“更有效的方式”的既定愿望,并且 C++ 中有一些简单的解决方案可以用对数复杂度而不是线性复杂度来实现这一点,这意味着这不是最好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
相关资源
最近更新 更多