Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
在c中标记字符串_C_String_Tokenize - Fatal编程技术网

在c中标记字符串

在c中标记字符串,c,string,tokenize,C,String,Tokenize,如何在c中标记这样的字符串: char str1[] = " property :: content | label "; char str2[] = "property::content"; char str3[] = "content"; [编辑] 我试过以下方法: char str[] = " property :: content | label "; char *property, *content, *label; property = strtok(str, "::"); co

如何在c中标记这样的字符串:

char str1[] = " property :: content | label ";
char str2[] = "property::content";
char str3[] = "content";
[编辑]

我试过以下方法:

char str[] = " property :: content | label ";
char *property, *content, *label;

property = strtok(str, "::");
content = strtok(NULL, "|");
label = strtok(NULL, "|");

printf ("%s %s %s\n", property, content, label);
但是它会根据一个字符分割字符串,这样就可以用于分隔标签的管道字符。但是“:”分隔符是字符串,而不是字符。我不知道怎么处理它

[编辑2]

我还有以下代码:

char sentence [] = "property :: content | label";
char property [30];
char content [30];
char label [30];

sscanf (sentence, "%s :: %s | %s", property, content, label);
printf ("<span property=\"%s\" content=\"%s\">%s</span>\n", property, content, label);
char语句[]=“属性::内容|标签”;
字符属性[30];
煤焦含量[30];
字符标签[30];
sscanf(句子,“%s::%s |%s”,属性、内容、标签);
printf(“%s\n”,属性、内容、标签);
我只是想知道如何动态设置每个字符数组的大小

谢谢。

你需要的是基本的

了解这一点的最好方法是拿起一本编译器书籍并阅读它

简言之,您将需要一组字符串,并开始将字符串与正则表达式进行匹配,直到找到最大的匹配字符串及其最终状态下的相应dfa

或者,如果每个标记都用空格分隔,您可以简单地使用
strtok
strcmp
来区分特殊单词(例如
)和其他输入


词法分析完成后,你需要一个。我不知道您的应用程序,因此您的解析器可能非常简单,但除此之外,可能会帮助您启动。

您可以尝试
strtok
sscanf
。或者要获得更多核心标记,请尝试
flex
@cnicutar:谢谢。strtok根据一个字符进行拆分,因此它将适用于用于分隔标签的管道字符。但是“:”是一个字符串。我不知道如何处理它。@user1415785-如果它不起作用,告诉我们你尝试了什么,为什么不起作用。再说一遍,我们不是你的个人研究助理。付出一些努力。@user1415785在您的示例中,所有标点符号都用空格括起来了。因此,在示例中,将
作为
strtok
sep
参数传递将起作用。我们猜不出语法到底是什么,你需要告诉我们。