在'['标记c ++之前预期的非限定标识

时间:2013-03-19 19:55:19

标签: c++ compiler-errors

我正在尝试创建一个tokenizer函数,但是我遇到了一个恼人的错误。我是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

抱歉所有这些粗心的错误。我修复了它们,但我仍然遇到同样的错误。

3 个答案:

答案 0 :(得分:1)

括号在哪里?!

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

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

return toks[];return toks;

答案 1 :(得分: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)

答案 2 :(得分: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;
}