gpt4 book ai didi

c - 删除 Lex 中的空白区域

转载 作者:行者123 更新时间:2023-11-30 15:02:46 24 4
gpt4 key购买 nike

当前我正在尝试使用 lex 和 c 删除文件中的空字符串。我的代码如下;

%{
#include<stdio.h>
#include<string.h>
%}
keyword hava|su
ques "?"|"!"
%%
{keyword} {

yytext[0]=toupper(yytext[0]);
printf("%s",yytext);
}
{ques} {
if(yytext[-1]==' '){
ECHO;yytext++;
}
printf("%s", yytext);
}
%%
int main()
{
//yyin=fopen("test.txt","r");
yylex();
return 0;
}
int yywrap()
{
return 1;
}

我可以看到问号附近的空白区域,我的目标是立即将其删除。但我没能做到;我不知道该怎么做。我尝试了复制数组并在那里复制新字符串,但由于我正在从文件中读取,所以出现错误。

另一个任务是在“ques”标点符号后面制作字符;同样在那里,我无法达到 +1 个字符。

为了到达之前和之后的字符,我使用 yytext[-1] 和 yytext[1] 代码,-1 可以检测空白,但 +1 无法从标点符号中找到之后的字符。可能是什么问题?

我的文件如下;

hava gibi, su gibi, güneş gibi, toprak gibi vazgeçilmezdi. Onunla yatılıp onunla kalkılıyordu ve yaratıcı gücünün sonsuzluğuna, edebiyatın insanı insan yapma büyüsüne İnanılıyordu. Toplumun yozlaşmaya ve her şeyin parayla ölçüldüğü, bilgi ve kültüre duyulan saygının, kredi kartlarına, görselliğe yönelmeye başladığı yıllarda, edebiyat "Bir işlevi yok." ? düşüncesiyle gazetelerden kovuldu. Edebiyat kovulunca da gazeteler çirkinleşti, gazetelerle birlikte dil de espri de düşünce de sığlaşıp yüceliğini yitirdi ?Bense ona öylece bakıyordum?

最佳答案

这是我的代码版本,似乎可以工作。请注意,我通过用 {} 包围关键字来识别映射的关键字,并通过用 [ 包围它们来识别映射的问号和感叹号> 和 ]。这有助于让我放心,它正在按照我的预期进行。除了作为调试助手之外,我不会将它们保留在生产代码中。

tk11.l

%{
#include <ctype.h>
#include <stdio.h>
#include <string.h>
%}

%option noinput
%option nounput

keyword hava|su
ques [ \t]*[?!]
%%

{keyword} { yytext[0] = toupper(yytext[0]); printf("{%s}", yytext); }
{ques} { printf("[%s]", &yytext[yyleng-1]); }
. { ECHO; }

%%

int main(void)
{
yylex();
return 0;
}

int yywrap(void)
{
return 1;
}

数据

这是从问题中复制的单行 601 个土耳其语字符(根据 http://translate.google.com/ ):

hava gibi, su gibi, güneş gibi, toprak gibi vazgeçilmezdi. Onunla yatılıp onunla kalkılıyordu ve yaratıcı gücünün sonsuzluğuna, edebiyatın insanı insan yapma büyüsüne İnanılıyordu. Toplumun yozlaşmaya ve her şeyin parayla ölçüldüğü, bilgi ve kültüre duyulan saygının, kredi kartlarına, görselliğe yönelmeye başladığı yıllarda, edebiyat "Bir işlevi yok." ? düşüncesiyle gazetelerden kovuldu. Edebiyat kovulunca da gazeteler çirkinleşti, gazetelerle birlikte dil de espri de düşünce de sığlaşıp yüceliğini yitirdi ?Bense ona öylece bakıyordum?

如果它分布在多行中会更好,但是......

输出:

$ ./tk11 < data
{Hava} gibi, {Su} gibi, güneş gibi, toprak gibi vazgeçilmezdi. Onunla yatılıp onunla kalkılıyordu ve yaratıcı gücünün son{Su}zluğuna, edebiyatın insanı insan yapma büyüsüne İnanılıyordu. Toplumun yozlaşmaya ve her şeyin parayla ölçüldüğü, bilgi ve kültüre duyulan saygının, kredi kartlarına, görselliğe yönelmeye başladığı yıllarda, edebiyat "Bir işlevi yok."[?] düşüncesiyle gazetelerden kovuldu. Edebiyat kovulunca da gazeteler çirkinleşti, gazetelerle birlikte dil de espri de düşünce de sığlaşıp yüceliğini yitirdi[?]Bense ona öylece bakıyordum[?]
$

如您所见,havasu 已被捕获并大写,并且任何问号之前不再有空格。

请注意,sonsuzluğuna 被音译为 son[Su]zluğuna;将整个单词作为关键字处理需要更多规则,小心处理代码集土耳其语部分中的非拉丁字母字符。

关于c - 删除 Lex 中的空白区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40949889/

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