gpt4 book ai didi

c - 未从 strtok_s() 获取标记化数组

转载 作者:行者123 更新时间:2023-11-30 16:12:48 26 4
gpt4 key购买 nike

我正在尝试使用 strtok_s() 函数获取一个标记化的数组,但我还想包含标记化数组的分隔符。如果它是斜杠“/”,我希望数组在任何使用斜杠“/”字符创建的标记处都具有斜杠。

我编写了一个函数,它接受字符串和分隔符并返回另一个带有标记和分隔符的字符串。

但是,它没有按预期工作,我不知道为什么。另外,我对C语言不太擅长。

任何正确方向的帮助或指导将不胜感激。

下面是我的主 cpp 文件和控制台输出

#include <stdio.h>
#include <string.h>
#include <stdlib.h>




struct token_stat {
int n; // for total items in array
char* r_array; // pointer to the array returned from function
};


// function for passing a string and a delimeter and getting back
// the array with tokenized items including the delimeter
token_stat append_token_delim(char* string_in, char splitter[])
{
token_stat result;
char* token = NULL ; // initialize variables for STRTOK_S func
char* next_token = NULL ;
char* token_accum = (char*)malloc(2*sizeof(string_in)) ; // allcate memory twice that of the string we are tokenizing
char* delim = splitter; // pointer to the delimeter in main function
int i = 0;


token = strtok_s(string_in, delim, &next_token); // first call and getting the token
while (token != NULL)
{
token_accum[i] = token[0]; // add the token to token_accum array
token_accum[i + 1] = *delim; // now add the delimeter character next to the 1st token
printf("%s\t%s\n", token, delim); // print token and the delimeter
token = strtok_s(NULL, delim, &next_token); // make call again to strtok to get next token
i = i + 2; // increment index by 2 to get to the next token
}

int numberOfTokens = sizeof(*token_accum) / sizeof(token_accum[0]); // get total items in token_accum array for printing in main
result.n = numberOfTokens; // passing values to TOKEN_STAT STRUCT
result.r_array = token_accum; // passing the array to STRUCT
return result; // returning the struct back

}
// printing the array
void print_tokens(token_stat in_array)
{ printf("Number of Tokens in Array; %d", in_array.n);
}


int main()
{
char str[] = "- Thi;s,ansample()str;ing.";
token_stat main_accum;
char delimeter = '/';

main_accum = append_token_delim(str, &delimeter);
print_tokens(main_accum);





return 0;
}

enter image description here

最佳答案

您想在 token_accum 中存储多个字符串,但只存储第一个字符 token_accum[i] = token[0];

要存储多个字符串,您需要一个指针数组你可以像这样存储字符串

token_accum[i] = token;

关于c - 未从 strtok_s() 获取标记化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58255817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com