我不确定从这里去哪里。我正在尝试使用数组从头开始执行 strtok 函数。我想将每个标记存储在临时数组中,打印它,然后对数组将拥有的尽可能多的标记继续执行此操作。例如,将诸如“this is fab”之类的字符串复制到 temp,直到遇到定界符(null、空格或任何字符)。然后打印出来。一切的最终结果应该是:
这个\n
是\n
很棒\n
有没有大神知道。
char strtok( char s[], char key)
{
char find;
char temp[100] = " ";
int i = 0;
while( s[i] != '\0')
{
i++;
for(; s[find] != key && s[find] != '\0'; find++)
{
temp[i]= s[find];
}
cout<<endl;
}
for( int x = 0; temp[x] != '\0'; x++)
{
cout<<temp[x];
}
cout<<endl;
}
最佳答案
标准strtok
定义如下:
char *strtok(char *str, const char *delim)
对于自制版本,它必须返回char*
。下面的示例类似于标准版本,但它使用 char
作为分隔符。
另请参阅 strtok 的示例
在第一次调用函数时应该设置变量。在随后的调用中,它应该从之前中断的地方继续。
char *homemade_strtok(char *arg, const char delimiter)
{
static int pos = 0;
static char* buf = 0;
static char* token = 0;
if (arg)
{
//start a new search
pos = 0;
buf = arg;
//delete previous token if any
if (token) delete token;
//create token at least as big as the argument
token = new char[strlen(buf) + 1];
}
if (!buf)
return 0;
if (pos >= strlen(buf))
return 0;
//prepare the token
memset(token, 0, strlen(buf) + 1);
int i = 0;
while (pos < strlen(buf))
{
if (buf[pos] == delimiter)
{
pos++;
return token;
}
token[i] = buf[pos];
i++;
pos++;
}
return token;
}
int main()
{
char *buf = "hello world 1a 2b 3c";
char *token = homemade_strtok(buf, ' ');
while (token)
{
std::cout << token << "\n";
token = homemade_strtok(NULL, ' ');
}
return 0;
}
已编辑:修复内存泄漏
关于c++ - 我正在尝试使用数组从头开始创建一个 strtok 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36713158/