从键盘输入一个字符串(长度<=40个字符),并以字符'.'结束.
例如:'This is a book.',现对该字符串进行编辑,编辑功能有:
D:删除一个字符,命令的方式为:
D a
其中a为被删除的字符
例如:D s表示删除字符's',若字符串中有多个's',则删除第一次出现的,如上例中删除的结果为:
'Thi is a book.'
I:插入一个字符,命令的格式为:
I a1 a2
其中a1表示插入到指定字符前面,a2表示将要插入的字符 例如: I s d 表示在指定字符's'的前面插入字符'd',若原串中有多个's',则插入在最后一个字符的前面,
如上例中,原串:'This is a book.'
插入后:'This ids a book.'
R:替换一个字符,命令格式为:
R a1 a2
其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1,则应全部替换
例如:原串:'This is a book.'
输入命令: R o e
替换后:'This is a beek.'
在编辑过程中,若出现被指定的字符不存在时,则给出提示信息'not valid.'
从键盘输入一个字符串(长度<=40个字符),并以字符'.'结束. 后面接着一条命令 含有多组测试数据
输出修改后的字符串
This is a beek.
not valid.
解题思路:
该题实在变态,用C/C++过不了,居然要用FPC过。简单的替换和转换,但就是不知道BT用例。算了,不做解释,FPC看不懂。
program BUAA1074;
var
s:string;
c,x,y:char;
i:integer;
procedure error;
begin
writeln('not valid.');
end;
begin
repeat
readln(s);
read(c);
case c of
'D':begin
readln(c,x);
if(pos(x,s)=0)then begin error;continue; end
else delete(s,pos(x,s),1);
end;
'I':begin
readln(c,x,c,y);
if(pos(x,s)=0)then begin error;continue; end
else begin
i:=length(s);while(s[i]<>x)do dec(i);
insert(y,s,i);
end;
end;
'R':begin
readln(c,x,c,y);
if(pos(x,s)=0)then begin error;continue; end
else
for i:=1 to length(s) do
if(s[i]=x)then s[i]:=y;
end;
end;
writeln(s);
until eof;
end.
这是我一直显示运行错误的C程序,囧:
#include
#include
#include
void main()
{ char s[50],m[1000],n[1000],type,b[10];
int i,j,t=0,r=0,count=0,flag=0;
char m1,n1,temp1,temp2,l;
gets(s);
/*读入数据的处理*/
while(gets(b) != NULL)
{
r=strlen(s);
type=b[0];
if(type=='D')
{ flag=0;
n1=b[2];
for(i=0;s[i]!='.';i++)
{
if(s[i]==n1)
{ flag=1;
for(j=i;s[j]!='.';j++)
s[j]=s[j+1];
s[r-1]='\0';
break;
}
}
if(flag==0)
printf("not valid.\n");
}
if(type=='I')
{flag=0;
m1=b[2];
n1=b[4];
for(i=r;i>=0;i--)
{
if(s[i]==m1)
{ flag=1;
for(j=r+1;j>=i;j--)
s[j]=s[j-1];
s[i]=n1;
s[r+2]='\0';
break;
}
}
if(flag==0)
printf("not valid.\n");
}
if(type=='R')
{ flag=0;
m1=b[2];
n1=b[4];
for(i=0;i<=r;i++)
{
if(s[i]==m1)
{ flag=1;
s[i]=n1;
}
}
if(flag==0)
printf("not valid.\n");
}
if(flag!=0)
{for(i=0;s[i]!='\0';i++)
printf("%c",s[i]);
printf("\n");
}
}
}