在'之前应为不合格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{
toif(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;i std::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
。Wrapstr[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)