#include<stdio.h> void Strlj(char a[],char b[]) { int num=0,n=0; while(a[num]!= '\0') num++; while(b[n]) { a[num]=b[n]; num++; n++; } /**************found**************/ a[num]=___1___; /**************found**************/ puts(___2___); }
时间: 2023-07-18 10:39:49 浏览: 191
第一个空应填写: `'\0'`,第二个空应填写: `a`。修改后的代码如下:
```c
#include <stdio.h>
void Strlj(char a[], char b[]) {
int num = 0, n = 0;
while (a[num] != '\0')
num++;
while (b[n]) {
a[num] = b[n];
num++;
n++;
}
a[num] = '\0';
puts(a);
}
```
函数的功能是将字符串 b 连接到字符串 a 的后面,并输出连接后的字符串。
相关问题
续写#include<stdio.h> #include<stdlib.h> typedef struct Linklist{ char name[10]; char num[10]; struct Linklist *next; }Linklist,*LNode; //创建链表 //输出链表 //修改链表中的某一项 //在链表尾部插入一项 //在链表中删除一项 void main(){ Linklist *L; int i=255; L=(LNode)malloc(sizeof(Linklist)); L->next=NULL; create(L); while(i!=0){ puts("\n功能:\n1.输出\t2.修改\t3.删除\t4.插入\t0.退出"); scanf("%d",&i); switch(i){ case 1: output(L); break; case 2: update(L); break; case 3: del(L); break; case 4: insert(L); break; } } }
续写:
//创建链表
void create(Linklist *L){
LNode p,q;
q=L;
int n;
printf("请输入链表长度:");
scanf("%d",&n);
for(int i=1;i<=n;i++){
p=(LNode)malloc(sizeof(Linklist));
printf("请输入第%d个节点的姓名和编号:",i);
scanf("%s%s",p->name,p->num);
p->next=NULL;
q->next=p;
q=p;
}
}
//输出链表
void output(Linklist *L){
LNode p;
p=L->next;
puts("姓名\t\t编号");
while(p){
printf("%s\t\t%s\n",p->name,p->num);
p=p->next;
}
}
//修改链表中的某一项
void update(Linklist *L){
char key[10];
LNode p;
p=L->next;
printf("请输入要修改的节点的编号:");
scanf("%s",key);
while(p){
if(strcmp(p->num,key)==0){
printf("请输入修改后的姓名和编号:");
scanf("%s%s",p->name,p->num);
puts("修改成功!");
return;
}
p=p->next;
}
puts("未找到该节点!");
}
//在链表尾部插入一项
void insert(Linklist *L){
LNode p,q;
p=L->next;
while(p->next){
p=p->next;
}
q=(LNode)malloc(sizeof(Linklist));
printf("请输入新节点的姓名和编号:");
scanf("%s%s",q->name,q->num);
q->next=NULL;
p->next=q;
puts("插入成功!");
}
//在链表中删除一项
void del(Linklist *L){
char key[10];
LNode p,q;
p=L->next;
q=L;
printf("请输入要删除的节点的编号:");
scanf("%s",key);
while(p){
if(strcmp(p->num,key)==0){
q->next=p->next;
free(p);
puts("删除成功!");
return;
}
q=p;
p=p->next;
}
puts("未找到该节点!");
}
int main(){
Linklist *L;
int i=255;
L=(LNode)malloc(sizeof(Linklist));
L->next=NULL;
create(L);
while(i!=0){
puts("\n功能:\n1.输出\t2.修改\t3.删除\t4.插入\t0.退出");
scanf("%d",&i);
switch(i){
case 1:
output(L);
break;
case 2:
update(L);
break;
case 3:
del(L);
break;
case 4:
insert(L);
break;
}
}
return 0;
}
下面是简单C语言的词法: 1.关键字: else if int return void while 所有的关键字都是保留字,并且必须是小写。 2. 下面是专用符号: + - * / < <= > >= == != = ; , ( ) [ ] { } 3. 其他标记是ID 和NUM ,通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 小写和大写字母是有区别的。 请利用flex生成上述语言的词法分析器。要求写出详细的步骤和相应的flex源程序。
步骤如下:
1. 安装flex
2. 创建文件 lexer.l
3. 在 lexer.l 中编写以下代码:
```flex
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
%}
%option noyywrap
%%
// 关键字
else { return ELSE; }
if { return IF; }
int { return INT; }
return { return RETURN; }
void { return VOID; }
while { return WHILE; }
// 专用符号
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return TIMES; }
"/" { return OVER; }
"<" { return LT; }
"<=" { return LE; }
">" { return GT; }
">=" { return GE; }
"==" { return EQ; }
"!=" { return NE; }
"=" { return ASSIGN; }
";" { return SEMI; }
"," { return COMMA; }
"(" { return LPAREN; }
")" { return RPAREN; }
"[" { return LBRACK; }
"]" { return RBRACK; }
"{" { return LBRACE; }
"}" { return RBRACE; }
// ID
[a-zA-Z]+[a-zA-Z0-9]* { return ID; }
// NUM
[0-9]+ { return NUM; }
// 空格、制表符和换行符
[ \t\n] { /* do nothing */ }
// 注释
"/*" { /* do nothing */ }
"*/" { /* do nothing */ }
"//" { /* do nothing */ }
. { return ERROR; }
%%
int main(int argc, char **argv)
{
yyin = fopen(argv[1], "r");
yyout = fopen("output.txt", "w");
int token;
while ((token = yylex())) {
switch (token) {
case ID:
fprintf(yyout, "ID\n");
break;
case NUM:
fprintf(yyout, "NUM\n");
break;
case ELSE:
fprintf(yyout, "ELSE\n");
break;
case IF:
fprintf(yyout, "IF\n");
break;
case INT:
fprintf(yyout, "INT\n");
break;
case RETURN:
fprintf(yyout, "RETURN\n");
break;
case VOID:
fprintf(yyout, "VOID\n");
break;
case WHILE:
fprintf(yyout, "WHILE\n");
break;
case PLUS:
fprintf(yyout, "PLUS\n");
break;
case MINUS:
fprintf(yyout, "MINUS\n");
break;
case TIMES:
fprintf(yyout, "TIMES\n");
break;
case OVER:
fprintf(yyout, "OVER\n");
break;
case LT:
fprintf(yyout, "LT\n");
break;
case LE:
fprintf(yyout, "LE\n");
break;
case GT:
fprintf(yyout, "GT\n");
break;
case GE:
fprintf(yyout, "GE\n");
break;
case EQ:
fprintf(yyout, "EQ\n");
break;
case NE:
fprintf(yyout, "NE\n");
break;
case ASSIGN:
fprintf(yyout, "ASSIGN\n");
break;
case SEMI:
fprintf(yyout, "SEMI\n");
break;
case COMMA:
fprintf(yyout, "COMMA\n");
break;
case LPAREN:
fprintf(yyout, "LPAREN\n");
break;
case RPAREN:
fprintf(yyout, "RPAREN\n");
break;
case LBRACK:
fprintf(yyout, "LBRACK\n");
break;
case RBRACK:
fprintf(yyout, "RBRACK\n");
break;
case LBRACE:
fprintf(yyout, "LBRACE\n");
break;
case RBRACE:
fprintf(yyout, "RBRACE\n");
break;
case ERROR:
fprintf(yyout, "ERROR\n");
break;
default:
break;
}
}
fclose(yyin);
fclose(yyout);
return 0;
}
```
4. 在终端中输入以下命令编译并运行:
```bash
flex lexer.l
gcc lex.yy.c -o lexer
./lexer input.c
```
其中,input.c 是需要进行词法分析的 C 语言源文件。
5. 运行结果会输出到 output.txt 文件中。
阅读全文