c语言编写程序查找关键字出现的位置 【问题描述】 查找C源程序文件中控制流关键字(while, for, if)的出现位置。按出现顺序输出其出现的位置(用行数和在该行上第几个字符表示)。要求字符串常量中出现的关键字不应计算,同时该C程序满足下列规定: 1、该程序符合C语言语法要求。 2、双引号只会用在字符串常量中,其它地方不会出现双引号字符"。 3、程序中的所有标识符只由字母和数字组成。 4、程序中没有注释语句。 【输入形式】 C源程序从当前目录下的in.c文件中读入。 【输出形式】 按照出现顺序在标准输出上输出关键字出现的位置,每行输出一个关键字的位置。位置的输出格式是:先输出关键字,后面紧跟着冒号:,然后是用整数表示的行数和在该行上的位置,两整数之间用一个逗号,分隔。
时间: 2024-02-13 12:05:04 浏览: 87
对于关键字检索C源文件
3星 · 编辑精心推荐
好的,你的问题是关于编写程序查找C源程序文件中控制流关键字(while, for, if)的出现位置。这个问题可以通过以下C语言代码实现:
```c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
FILE* fp = fopen("in.c", "r");
if(fp == NULL)
{
printf("Failed to open file.\n");
return 0;
}
char line[1001], word[10];
int linenum = 0, pos = 0;
while(fgets(line, 1000, fp) != NULL)
{
linenum++;
pos = 0;
int len = strlen(line);
for(int i = 0; i < len; i++)
{
if(isalpha(line[i]))
{
int j = 0;
while(isalnum(line[i+j]))
{
word[j] = line[i+j];
j++;
}
word[j] = '\0';
if(strcmp(word, "while") == 0 || strcmp(word, "for") == 0 || strcmp(word, "if") == 0)
printf("%s:%d,%d\n", word, linenum, pos+i+1);
i += j;
}
}
}
fclose(fp);
return 0;
}
```
这个程序首先打开当前目录下的in.c文件,然后逐行读取文件内容,在每一行中查找控制流关键字的出现位置,并按照出现顺序输出。其中,isalpha和isalnum是C标准库函数,用于判断字符是否是字母或数字;strcmp是C标准库函数,用于比较两个字符串是否相等。
阅读全文