📜  c++ tokenize string - C++ (1)

📅  最后修改于: 2023-12-03 14:39:53.484000             🧑  作者: Mango

C++:分析字符串

介绍

当我们在处理文本或编写编译器时,通常需要将文本拆分成一系列词语或标记。这个过程被称为"tokenize"或"解析"。

在C++中,我们可以使用istringstream或正则表达式等工具来执行此操作,以便将字符串分解为令牌。本文将介绍这两种方法。

使用istringstream

可以使用C++的istringstream来将字符串分解为令牌。下面是一个简单的例子:

#include <iostream>
#include <string>
#include <sstream>

int main()
{
    std::string str = "Hello World";
    std::istringstream iss(str);
    std::string token;

    while (iss >> token)
    {
        std::cout << token << std::endl;
    }

    return 0;
}

在上面的例子中,我们首先创建一个字符串对象str,然后使用istringstream将其转换为iss。我们还声明了一个token字符串来保存每个令牌。在while循环中,我们使用>>操作符将字符串分解为令牌,并将其保存在token中。最后,我们打印每个令牌。

使用正则表达式

可以使用正则表达式来将字符串分解为令牌。下面是一个简单的例子:

#include <iostream>
#include <string>
#include <regex>

int main()
{
    std::string str = "Hello World";
    std::regex pattern("\\s+");
    std::sregex_token_iterator it(str.begin(), str.end(), pattern, -1);
    std::sregex_token_iterator end;

    while (it != end)
    {
        std::cout << *it++ << std::endl;
    }

    return 0;
}

在上面的例子中,我们首先创建一个字符串对象str,然后创建一个正则表达式对象pattern,它将匹配一个或多个空格字符。我们还创建了sregex_token_iterator对象it来保存分解后的令牌。在while循环中,我们遍历所有令牌并将它们打印出来。

总结

在本文中,我们介绍了两种将字符串分解为令牌的方法:使用istringstream和正则表达式。这两种方法都可以很好地帮助我们分析文本或编写编译器。