当前位置: 代码迷 >> C语言 >> [讨论]第七次编程题目,大家支持一下
  详细解决方案

[讨论]第七次编程题目,大家支持一下

热度:354   发布时间:2007-03-11 19:24:35.0
以下是引用crackerwang在2007-3-11 19:14:06的发言:

那要是我输入的是
ddd......dd(240个)@ddd...d(240个)
你觉得你的输出是什么?
我觉得你的输出应该是:
dd..d(10个)应为你读取只到@后10个d
显然答案不对

我都说,如果要处理范围和输入问题,程序不会几十行解决,但算法是没有错误的。
你输入己经超出范围,结果是有点不同。你如果继续说,就没有意义。


----------------解决方案--------------------------------------------------------

干脆把我自己的行编译器程序贴出来,大家帮忙找不足之处.

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

int main()
{
#ifndef ONLINE_JUDGE
freopen ("hangbianyiqi.txt","r",stdin);
#endif

char c,str[300];
int i=0;
while(EOF!=(c=getchar()))//采取文件输入
{
if(c=='#')
{
if(i>0&&str[i-1]!='\n')
{
i--;//退格
}
}
else
{
if(c=='@')//可以先用一数组保存每一个换行符出现的位置,方便查找。
{

while(i>0&&str[--i]!='\n');
i++;
}
else
{
str[i++]=c;
}
}
}
str[i]='\0';
printf("%s\n",str);
return(0);
}


调式的话请在和程序同目录下建一hangbianyiqi.txt文件,里面输入你要测试的字符串.

[此贴子已经被作者于2007-3-11 20:21:34编辑过]


----------------解决方案--------------------------------------------------------
我也把我的发上来,虽然没有象斑竹那样对输入的函数没有限制,但是其他功能我还是能实现
#include<stdio.h>
#include<conio.h>
void main()
{
int i=0,j;
char a[4][250];
for(j=0;j<4;j++)
a[j][0]='\0';
for(j=0;j<4;j++)
{
i=0;
while(i<250)
{
a[j][i]=getche();
if(int(a[j][i])==13)
{
printf("\n");
a[j][i]='\0';
break;
}
a[j][i+1]='\0';
if(a[j][i]=='@')
{
i=0;
a[j][0]='\n';
}
else if(a[j][i]=='#')
{
if(i==0)
{
a[j][i]='\0';
i=-1;
}
else
{
i-=2;
a[j][i+1]='\0';
}
}
else
;
i++;
}
}
printf("\n*************\n");
for(i=0;i<4;i++)
{
for(j=0;a[i][j]!='\0';j++)
{
printf("%c ",a[i][j]);
}
printf("\n");
}
}
希望大家多多指教

----------------解决方案--------------------------------------------------------
无玩过界的一行行处理不错.
可以用一空行作为字符串结束的标志.
----------------解决方案--------------------------------------------------------
以下是引用crackerwang在2007-3-11 19:57:04的发言:
我也把我的发上来,虽然没有象斑竹那样对输入的函数没有限制,但是其他功能我还是能实现
#include<stdio.h>
#include<conio.h>
void main()
{
int i=0,j;
char a[4][250];
for(j=0;j<4;j++)
a[j][0]='\0';
for(j=0;j<4;j++)
{
i=0;
while(i<250)
{
a[j][i]=getche();
if(int(a[j][i])==13)
{
printf("\n");
a[j][i]='\0';
break;
}
a[j][i+1]='\0';
if(a[j][i]=='@')
{
i=0;
a[j][0]='\n';
}
else if(a[j][i]=='#')
{
if(i==0)
{
a[j][i]='\0';
i=-1;
}
else
{
i-=2;
a[j][i+1]='\0';
}
}
else
;//和哪个匹配,再说空语句还不如不要.
i++;
}
}
printf("\n*************\n");
for(i=0;i<4;i++)
{
for(j=0;a[i][j]!='\0';j++)
{
printf("%c ",a[i][j]);
}
printf("\n");
}
}
希望大家多多指教


----------------解决方案--------------------------------------------------------
好象是真的可以不要,
----------------解决方案--------------------------------------------------------
我倒觉得加了会编译出错.语法错误.
----------------解决方案--------------------------------------------------------
to:crackerwang严格来说你是违反了题意,虽然你可以骗过人的感觉,但本质上没有改变。
----------------解决方案--------------------------------------------------------
仔细想想确实有是有违题意,我以为是输入250个有效的字符,题目意思是未经过处理的250个字符
----------------解决方案--------------------------------------------------------

以下是引用crackerwang在2007-3-11 21:10:53的发言:
仔细想想确实有是有违题意,我以为是输入(不超过)250个有效的字符,题目意思是未经过处理的(不超过)250个字符


----------------解决方案--------------------------------------------------------

  相关解决方案