有没有办法对两个字符串进行标记并并行处理这些标记?
Is there a way to tokenize two strings and go through the tokens in parallel?
有没有办法对两个字符串进行分词并并行移动分词? (因为我有两个字符串,所以我不能使用 strtok(NULL, "bar")
两次)
此外,有没有办法让 strtok
标记一个字符串并保持该字符串未标记?
例如:
void foo(char* form, char* num){
char *templ=form, *tempr=num;
templ = strtok(templ, " ");//but this tokenize form as well
因此,曾几何时,strtok 的手册页更明确地表示不使用它。无论如何:
- strtok_r为可重入版本;这应该允许您并行处理令牌。
- 据我所知,让 strtok 不保持字符串未标记是不可能的;你会想要使用 strcpy 来制作未损坏版本的副本。
是的,在大多数平台上都有。您可以使用 strtok_r
,它是 strtok
的可重入版本,它不会将状态存储在静态内存中:
char *save1, *save2;
temp1 = strtok_r(templx, " ", &save1);
temp2 = strtok_r(temply, " ", &save2);
请注意,如果 strtok_r
可用,您通常应该使用它,即使是解析单个标记源也是如此。
如果 strtok_r
不可用,您可以使用 sscanf
并跟踪要标记化的字符串中的位置。根据您要解决的标记化任务的复杂性,这也可以提供可行的解决方案。
有没有办法对两个字符串进行分词并并行移动分词? (因为我有两个字符串,所以我不能使用 strtok(NULL, "bar")
两次)
此外,有没有办法让 strtok
标记一个字符串并保持该字符串未标记?
例如:
void foo(char* form, char* num){
char *templ=form, *tempr=num;
templ = strtok(templ, " ");//but this tokenize form as well
因此,曾几何时,strtok 的手册页更明确地表示不使用它。无论如何:
- strtok_r为可重入版本;这应该允许您并行处理令牌。
- 据我所知,让 strtok 不保持字符串未标记是不可能的;你会想要使用 strcpy 来制作未损坏版本的副本。
是的,在大多数平台上都有。您可以使用 strtok_r
,它是 strtok
的可重入版本,它不会将状态存储在静态内存中:
char *save1, *save2;
temp1 = strtok_r(templx, " ", &save1);
temp2 = strtok_r(temply, " ", &save2);
请注意,如果 strtok_r
可用,您通常应该使用它,即使是解析单个标记源也是如此。
如果 strtok_r
不可用,您可以使用 sscanf
并跟踪要标记化的字符串中的位置。根据您要解决的标记化任务的复杂性,这也可以提供可行的解决方案。