求: c语言insert问题

zb830110 2009-09-17 07:15:12
题目是:读取txt文件中的字符串,如果是数组word,special和name中的,输出字符串和对应的数值(例如:BEGIN(0)),
如果在以上数组中找不到此字符串,就把此字符串放到name数组中的最后一位,然后再给一个对应的数值


#include<stdio.h>
#include<conio.h>
#include<string.h>

int key = 0;
char word[][50][50] = {{"BEGIN", "END", "CONST", "ARRAY", "INTEGER", "BOOLEAN", "PROC", "VAR", "SKIP", "READ", "WRITE", "CALL", "IF", "FI", "DO", "OD", "FALSE", "TRUE", "FLOAT"},{"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18"}};
char special[][50][50] = {{"+", "-", "*", "/", ",", "(", ")", "<=", "<", ";", "=", "~=", "$", "&", "|", "[", "]", ">=", ">", ":=", ".", "->"},{"19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40"}};
char name[][100][100]={{"a"},{"41"}};
int searchSymbol(char[], char[][50][50]);
int insertSymbol(char nam[], char nameList[][100][100]);

int main()
{
char s[50][50];
int t = 0, p;
int i, j, k;
char sbexpr[50];

FILE *f = fopen("input.txt","r");
while(fscanf(f,"%s", s[t]) != EOF) t++;

for (i = 0; i <t; i++) {

for (k = 0; s[i][k] != '\0'; k++) {

sbexpr[k] = s[i][k];
}

sbexpr[k] = '\0';
if( searchSymbol(sbexpr, special) ){
continue;
}
else if(searchSymbol(sbexpr, word) ){
continue;
}
else if(searchSymbol(sbexpr, name) ){
continue;
}
else if(insertSymbol(sbexpr, name) ) {
continue;
}
}

return 0;
}

int searchSymbol(char expr[], char check[][50][50]) {
int i;
for (i = 0; i <50 ; i++) {
if (strcmp(expr, check[0][i]) == 0) {
printf("\n %s(%s)", check[0][i],check[1][i]);
return 1;
}
}
return 0;
}

int insertSymbol(char nam[], char nameList[][100][100]){
int i,j;
for(j=0; j<100; j++){
for(i=0; nameList[0][j][i]!='\0'; i++){
nameList[0][j][i]=nam[i];
return i;
break;
}
}
printf("\n %s(%s)", nameList[0][1],nameList[1][1]);
// printf("%s",nameList);



return 0;
}
...全文
357 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐浴-vip 2009-09-17
  • 打赏
  • 举报
回复
学习下~!
hoomey 2009-09-17
  • 打赏
  • 举报
回复
up
coldiceangel 2009-09-17
  • 打赏
  • 举报
回复
insertSymbol改成这样吧:
int insertSymbol(char nam[], char nameList[][100][100]){
// find the first empty string
int i = 0;
int j = 0;
for (; i < 100; ++i)
{
if (strcmp(nameList[0][i], "") == 0)
{
break;
}
}

if (i == 100)
{
// error
return 0;
}
else if (i == 99)
{
// no empty space
return 0;
}

for (; j < 100 && nam[j] != '\0'; ++j)
{
nameList[0][i][j] = nam[j];
}
nameList[0][i][j] = '\0';
return 1;
}
whg01 2009-09-17
  • 打赏
  • 举报
回复
char name[100][50] 最低的维度要一致。
建议你改一下变量的定义
typedef struct {
char name[50];
int value; //你的value可以用整数,而不是字符串。
}STRPOS;
STRPOS word[50] = {{"BEGIN",0}, {"END",1}, {"CONST",2}......};
按照这个方法把变量都改过来。你的程序就很清晰了。
zhongchengli 2009-09-17
  • 打赏
  • 举报
回复
bang ding

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧