Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在'之前应为不合格id;[';令牌c+;+; 我想制作一个记录器函数,但是我得到了一个恼人的错误。我是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; }_C++_Compiler Errors - Fatal编程技术网

在'之前应为不合格id;[';令牌c+;+; 我想制作一个记录器函数,但是我得到了一个恼人的错误。我是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; }

在'之前应为不合格id;[';令牌c+;+; 我想制作一个记录器函数,但是我得到了一个恼人的错误。我是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; },c++,compiler-errors,C++,Compiler Errors,为所有这些粗心的错误感到抱歉。我修复了它们,但仍然得到相同的错误。括号在哪里 if-str[i]==delim{toif(str[i]==delim){ 及 tokens[i]==“到tokens[i]=”“ 及 returntoks[];到returntoks;您的语法很奇怪(我假设您来自Java或C),并且缺少很多上下文,但我假设您的目标是获取字符串并“标记化”它。这是一个工作的实现,大致基于您的代码。它无论如何都不是最优的,但它可以工作,您应该能够理解它 #include <iost

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

括号在哪里

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

tokens[i]==“
tokens[i]=”“

returntoks[];
returntoks;

您的语法很奇怪(我假设您来自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;
}
#包括
#包括
#包括
std::vector标记器(const std::string和str,
char delim=“”,
bool emptyok=false)
{
std::向量标记;
std::字符串t;
对于(int i=0;istd::cout函数的签名

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

不是有效的C++。典型的方法是用<代码> STD::vector < /C> >:

std::vector<string> tokens;

现在忘记这个。<代码> 3代码/代码>甚至意味着什么?为什么不把索引屏蔽成<代码>令牌< /代码>?这样的代码是所有邪恶和邪恶的根源,关于C和C++。使用<代码> STD::向量< /代码>:

std::vector<string> tokens;
或者

for(auto c : str)

在括号中使用
std::vector
。Wrap
str[i]==delim
。有这么多错误……函数返回
string[]
意味着什么?什么是
toks
?什么是
返回toks[]
应该做什么?返回toks应该返回数组的内存地址。我希望能够键入3个由空格分隔的单词并将3个单词存储在数组中。您不能返回
toks[]
因为(a)
toks
不是一个变量(据我们所知)和(b)语法
toks[]在返回的上下文中,是毫无意义的。我假设你来自java和/或C++,C++工作有点不同。检查我的答案,它支持任何单词(Aka令牌)的工作实现。你不允许在C++中返回一个数组吗?不,不,你可以返回一个指针,但是你必须动态地分配内存使用<代码>新的<代码>,因为你不能返回基于栈的临时数据。只是让你的生活更容易,使用<代码> STD::向量< /代码>。这会破坏我的代码,我见过的最坏的错误。它打印Rand。om字符和目录,这太奇怪了。这是确切的代码?还是你调整过的代码?如果是,我们需要看看调整过的代码。确切的代码,我拿走了std::everywhere,因为我说使用名称空间std。这就是我如何称它为vector inputV=tokenizer(输入“”,false);顺便说一下,我还通过去掉=''和=false更改了标题
std::vector<string> tokens;
for(auto it = str.begin(), end = str.end(); it!=end; ++it)
for(auto c : str)