C语言编译报错(ACM上报错,但是三种编译器都通过)

程序员小周 2015-06-18 01:15:25
代码如下:
#include<stdio.h>
#include<string.h>
#include<time.h>
int WQD=0x3f3f3f3f;
typedef struct
{
int data;
int fu;
}jgt;
jgt d[100];//建立100个结点


void Huffman(int n)
{
int m1,m2,x1,x2,t,i,j;
for(i=0;i<n;i++)
{
m1=m2=WQD;
for(j=0;j<n+i;j++)//找到两个较小值的根结点
{
if(m1>d[j].data&&d[j].fu==-1&&d[j].data!=0)
{
m2=m1;
m1=d[j].data;
x2=x1;
x1=j;
}
else if(m2>d[j].data&&d[j].fu==-1&&d[j].data!=0)
{
x2=j;
m2=d[j].data;
}
}
if(m2!=WQD)
{
t=n+i;
d[t].data=m1+m2;//加入结点
d[x1].fu=t;
d[x2].fu=t;
}
}
}
int main()
{
clock_t start,finish; //测试运行时间
start=clock();
char s[2000];
int i,l,c,p,zjs;
while(scanf("%s",s))
{
if(strcmp(s,"END")==0)
break;
for(i=0;i<80;i++)//初始化
{
d[i].data=0;
d[i].fu=-1;
}
l=strlen(s);//记录字符串长度
for(i=0;i<l;i++)
if(s[i]=='_')
d[26].data++;
else
d[s[i]-'A'].data++;
Huffman(27);//建立哈弗曼树
for(i=0;i<=26;i++)
{
c=0;
if(d[i].data!=0)
{
p=i;
while(d[p].fu!=-1)
{
c++;
p=d[p].fu;
}
if(c==0)
c=1;
d[i].data=c;
}
}
zjs=0;//zjs记录所需总字节数
for(i=0;i<l;i++)
{
if(s[i]=='_')
zjs+=d[26].data;
else
zjs+=d[s[i]-'A'].data;
}
printf("%d %d %.1f\n",8*l,zjs,8.0*l*1.0/zjs);
finish=clock();
printf("共耗时%.3lf秒",((double)finish-start)/1000);
}
return 0;
}
编译报错如下:
F:\temp\14305940.8383\Main.cc:87: error: missing terminating " character
F:\temp\14305940.8383\Main.cc:40: error: expected declaration before '}' token
问题如下:
这个程序是哈弗曼树+贪心算法以及求解压缩比,是北大1521OJ题,程序在DEV、Code blocks、VS2008上面均可以编译并且正常运行,但是在北大提交之后却编译报错,选择的编译环境是G++,用GCC或者C进行编辑,报错会更多,求大神解答。
...全文
585 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aic1999 2016-12-12
  • 打赏
  • 举报
回复
中文空格和英文空格有差距??TAT我的天.....
程序员小周 2015-06-18
  • 打赏
  • 举报
回复
问题解决了。。是代码中有中文空格符号,非常隐蔽的问题,用notepad替换掉了中文空格,ACM上可以提交通过了,谢谢大神
赵4老师 2015-06-18
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
羽飞 2015-06-18
  • 打赏
  • 举报
回复
编译器不同,差异可能很大的 我在我的机器上编译,加了两个头文件,用gcc(gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) )编译通过,代码如下:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int WQD=0x3f3f3f3f;
typedef struct
{
	int data;
	int fu;
}jgt;
jgt d[100];//建立100个结点


void Huffman(int n)
{
	int m1,m2,x1,x2,t,i,j;
	for(i=0;i<n;i++)
	{
		m1=m2=WQD;
		for(j=0;j<n+i;j++)//找到两个较小值的根结点
		{
			if(m1>d[j].data&&d[j].fu==-1&&d[j].data!=0)
			{
				m2=m1;
				m1=d[j].data;
				x2=x1;
				x1=j;
			}
			else if(m2>d[j].data&&d[j].fu==-1&&d[j].data!=0)
			{
				x2=j;
				m2=d[j].data;
			}
		}
		if(m2!=WQD)
		{
			t=n+i;
			d[t].data=m1+m2;//加入结点
			d[x1].fu=t;
			d[x2].fu=t;
		}
	}
}
int main()
{
	clock_t start,finish; //测试运行时间 
	start=clock();
	char s[2000];
	int i,l,c,p,zjs;
	while(scanf("%s",s))
	{
		if(strcmp(s,"END")==0)
			break;
		for(i=0;i<80;i++)//初始化
		{
			d[i].data=0;
			d[i].fu=-1;
		}
		l=strlen(s);//记录字符串扯?
		for(i=0;i<l;i++)
			if(s[i]=='_')
				d[26].data++;
			else
				d[s[i]-'A'].data++;
		Huffman(27);//建立哈弗曼树
		for(i=0;i<=26;i++)
		{
			c=0;
			if(d[i].data!=0)
			{
				p=i;
				while(d[p].fu!=-1)
				{
					c++;
					p=d[p].fu;
				}
				if(c==0)
					c=1;
				d[i].data=c;
			}
		}
		zjs=0;//zjs记录所需总字节数
		for(i=0;i<l;i++)
		{
			if(s[i]=='_')
				zjs+=d[26].data;
			else
				zjs+=d[s[i]-'A'].data;
		}
		printf("%d %d %.1f\n",8*l,zjs,8.0*l*1.0/zjs);
		finish=clock();
		printf("共耗时%.3lf秒",((double)finish-start)/1000);
	}          
	return 0; 
}

69,374

社区成员

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

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