ACM的字符替换问题“University”,总是runtime error,是什么原因呢?

Description在大学里,很多单词都是一词多义,偶尔在文章里还要用引申义。这困扰Redraiment很长的时间。他开始搜集那些单词的所有意义。他发现了一些规律,例如... Description
在大学里,很多单词都是一词多义,偶尔在文章里还要用引申义。这困扰Redraiment很长的时间。他开始搜集那些单词的所有意义。他发现了一些规律,例如 “a”能用“e”来代替, “c”能用“f”来代替…… 现在他给出了字母的替换规则,如下所示,A被E替换,B被C替换,依次类推。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z E C F A J K L B D G H I V W Z Y M N O P Q R S T U X a b c d e f g h i j k l m n o p q r s t u v w x y z e r w q t y g h b n u i o p s j k d l f a z x c v m
Input
本题包括多组测试数据。 每组测试数据为一行:为仅由字母和空格组成的字符串(空格不变)。 输入以单行“#”结束。
Output
对应每组测试数据,替换后输出它的引申义。
Sample Input
Ilttabaje zaujljg
#
Sample Output
Different meaning

以下是我的代码,求指教~~

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 5000
char a[N],b[N][N];
int n[N];
int main()
{
int i,j,k;
for(j=0;;j++)
{
memset(a,0,sizeof(a));
fgets(a,sizeof(a),stdin);
n[j]=strlen(a);
if(a[0]=='#'&&a[1]=='\n') break;
for(i=0;i<n[j];i++)
{
if(a[i]==' ') b[i][j]=' ';
else if(a[i]=='A') b[i][j]='E'; else if(a[i]=='B') b[i][j]='C'; ...................字符替换部分,太长省略了..................... else if(a[i]=='y') b[i][j]='v'; else if(a[i]=='z') b[i][j]='m';
else b[i][j]=a[i];
}
}
for(k=0;k<j;k++)
{
for(i=0;i<n[k];i++)
printf("%c",b[i][k]);
}
return 0;
}
展开
 我来答
304467594
2011-04-23 · 超过14用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:109万
展开全部
看完LZ的代码我怎么觉得好像你的程序只要输入'#'或回车,然后输出结果就不能在输入了;
我应该没搞错把~虽然我不是学C的~OJ通常都是有多组输入数据的,而且题目也有说明,只是以'#'为每个case的结束;
而且我觉得你开一个b[N][N];数组太浪费内存了,这个换成一维数组就应该OK了把~;
就是把a[i]的字母换成对应的字母放入b[i]就行了把,就像if(a[i]=='A') b[i]=‘E’这样,然后在按顺序讲数组b输出就OK了把;
至于LZ所说的runing error有以下几种可能:
Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的错误类型:

ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的。
ARRAY_BOUNDS_EXCEEDED 您的程序试图访问一个超出硬件支持范围的数组单元。
FLOAT_DENORMAL_OPERAND 进行了一个非正常的浮点操作。一般是由于一个非正常的浮点数参与了浮点操作所引起的,比如这个数的浮点格式不正确。
FLOAT_DIVIDE_BY_ZERO 浮点数除法出现除数为零的异常。
FLOAT_OVERFLOW 浮点溢出。要表示的数太大,超出了浮点数的表示范围。
FLOAT_UNDERFLOW 浮点下溢。要表示的数太小,超出了浮点数的表示范围。
INTEGER_DIVIDE_BY_ZERO 在进行整数除法的时候出现了除数为零的异常。
INTEGER_OVERFLOW 整数溢出。要表示的数值太大,超出了整数变量的范围。
STACK_OVERFLOW 栈溢出。一般是由于无限递归或者在函数里使用了太大的数组变量的原因。

我觉得你的程序应该是因为数组开小了~而导致的数组越界,因为我学的是C++所以用string就可以了,即使在长的不会越界,C语言我就不知道怎么用了~~LZ尝试把数组开大点把~!
追问
谢谢你告诉我这么多!我把数组开到50000,b也改到一维的了,可是还是RE。。。
追答
你做的是哪的OJ 给个网站给我~我去看看这题
nce009
2011-04-17 · TA获得超过274个赞
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:232万
展开全部
1.可能数组开小了
2.除以0了
3.栈溢出
4.读入的时候没取地址
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式