0

我正在尝试制作一个标记器功能,但我遇到了一个烦人的错误。我是 C++ 新手,语法不及格。感谢你给与我的帮助。

using namespace std;

string[] tokenizer(const string &str, const char &delim){
    string tokens[3];
    for(int i = 0; i < 3; i++) tokens[i] = "";
    int start = 0;
    int toks = 0;
    for(int i = 0; i < str.length(); i++){
        if (str[i] == delim){
            for(int j = start; j < i; j++)
                tokens[toks] += str[i];
        }
    }
    return tokens;
}

错误在函数头中。

expected unqualified-id before '[' token

对于所有这些粗心的错误,我们深表歉意。我修复了它们,但我仍然得到同样的错误。

4

3 回答 3

1

括号在哪里?!

if str[i] == delim{if (str[i] == delim){

tokens[i] == ""tokens[i] = ""

return toks[];return toks;

于 2013-03-19T19:58:11.097 回答
1

你的函数的签名

string[] tokenizer(const string &str, const char &delim)

不是有效的 C++。执行此操作的典型方法是std::vector<>

std::vector<string> tokenizer(const string &str, const char &delim)

然后:

string tokens[3];

现在忘记这个。甚至是什么3意思?您为什么不将索引设置为tokens?像这样的代码是所有关于 C 和 C++ 的恶言恶语的根源。使用std::vector

std::vector<string> tokens;

要将项目添加到std:vector,请使用push_back()emplace_back()

然后,在 C++ 中迭代项目的惯用方法是使用迭代器或基于范围的:

for(auto it = str.begin(), end = str.end(); it!=end; ++it)

或者 ...

for(auto c : str)
于 2013-03-19T20:27:44.617 回答
0

您的语法很奇怪(我假设您来自 Java 或 C#)并且缺少很多上下文,但我假设您的目标是获取一个字符串并“标记化”它。这是一个工作实现,大致基于您的代码。它无论如何都不是最佳的,但它有效,你应该能够理解它。

#include <iostream>
#include <string>
#include <vector>

std::vector<std::string> tokenizer(const std::string &str,
                                   char delim = ' ',
                                   bool emptyok = false)
{
    std::vector<std::string> tokens;
    std::string t;

    for(int i = 0; i < str.length(); i++) 
    {       
        if (str[i] == delim) 
        {
            if(emptyok || (t.length() != 0)) 
                tokens.push_back(t);

            t.clear();      
            continue;
        }

        t.push_back(str[i]);
    }

    // And take care of anything that's left over...
    if(emptyok || (t.length() != 0)) 
        tokens.push_back(t);

    return tokens;
}

int main(int, char **)
{       
    std::string s = "This is a test of the emergency broadcast system yo!";

    std::vector<std::string> x = tokenizer(s, ' ');

    for(int i = 0; i != x.size(); i++)
        std::cout << "Token #" << i << ": \"" << x[i] << "\"" << std::endl;

    return 0;
}
于 2013-03-19T20:22:46.520 回答