📅  最后修改于: 2023-12-03 15:32:38.629000             🧑  作者: Mango
本程序是基于LEX语言编写的,它可以读取用户输入的字符串,并输出其中最长的字符串。此外,它还可以计算用户输入的数字的平均值。
下面是LEX程序的完整代码:
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char longest_str[100];
int current_len = 0;
int n_sum = 0;
int n_count = 0;
%}
%%
. {
current_len++;
}
\n {
if (current_len > strlen(longest_str)) {
sprintf(longest_str, "%.*s", current_len-1, yytext);
}
current_len = 0;
}
[0-9]+ {
n_sum += atoi(yytext);
n_count++;
}
%%
int main() {
yylex();
printf("Longest string: %s\n", longest_str);
printf("Average of numbers: %s\n", (n_count > 0) ? (n_sum/n_count) : "N/A");
return 0;
}
LEX程序的代码由三个部分组成:
longest_str
变量是用于存储目前发现的最长字符串的数组;current_len
变量是用于记录当前正在读取的字符串的长度;n_sum
变量是用于存储输入数字的总和;n_count
变量是用于记录输入数字的数量。.
规则表示对于任何一个非换行符的字符,当前字符串的长度current_len
都需要加1;\n
规则表示读取到换行符时,需要将当前字符串与已经找到的最长字符串比较,如果当前字符串更长,就将其存储到longest_str
变量中,并重置current_len
变量。yylex()
函数来读取用户输入的字符串,并输出计算结果。如果用户输入了数字,它会将这些数字的总和存储到n_sum
变量中,并将计数器n_count
加1。当用户输入完毕后,它会输出已经发现的最长字符串,以及计算出的平均值(如果有输入数字,则输出其平均值,否则输出"NA")。要使用此程序,只需将其复制到一个文件中(假设文件名为program.lex
),然后使用以下命令来编译它:
lex program.lex
gcc -o program lex.yy.c -ll
编译成功后,输入以下命令运行程序:
./program
接着根据程序提示输入需要处理的字符串,以及一些整数。程序会输出其中最长的字符串,并计算输入的整数的平均值。
本程序基于LEX实现了一个针对用户输入字符串的分析工具,它可以帮助用户查找出最长的字符串,并计算输入整数的平均值。此工具的实现过程中,我们需要深入了解LEX程序的结构和语法,以便能够正确地解析用户输入的数据。