我正在尝试找到由字母组成的最长单词 [ghijklpqrswxyz].. 这似乎是一个简单的问题,但我想我在理解如何 lex/yaac 有效。我正在使用 linux/usr/share/dict/words 文件和程序来测试它 simple 返回整个单词列表,而不是打印最长的单词..
% lex example.l
% cc lex.yy.c -ll
% ./a.out < /usr/share/dict/words
问题出在哪里?
%{
char* longest="";
%}
%option noyywrap
%%
^[ghijklpqrswxyz]+$ {if (strlen(yytext)>strlen(longest)) {longest = yytext;}}
.|\n {;}
%%
int main(void)
{
yylex();
printf("The longest matching word: %s\n", longest);
return 0;
}
最佳答案
yytext
的值被覆盖。您将需要复制并复制该值,而不是简单地分配它:
longest = malloc(sizeof(char)*strlen(yytext)); strcpy(longest, yytext);
请记住,您将需要清除(释放)最长
的连续值。但请注意不要释放
静态分配的值longest = "";
!
关于regex - 莱克斯/雅克 : using global variables and finding the longest occurance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147403/