根据您的要求,我先用if+for语句编了一下这个程序,我自己认为比case简单,case加下面:
var h,m,i,j:longint;
st,s:string;
begin
readln(st);
j:=pos(':',st); h:=0; m:=0;
for i:=1 to j-1 do h:=h*10+ord(st[i])-48;
for i:=j+1 to length(st) do m:=m*10+ord(st[i])-48;
if h>12 then
begin h:=h-12; s:='PM'; end else s:='AM';
writeln(h,':',m,s);
end.
程序在输入方面可能有点与题目不同,需要输入“小时:分钟”,这样方便pos语句工作。
我按照您的要求已经在Pascal上测试过,均正确输出。
下面是case语句写的,嵌套在for循环里。输入依然中间得加“:”。这段程序主要用了一个数组来存放小时与分钟。
var time:array[1..2]of longint;
i,j:longint;
st,s:string;
begin
readln(st); //输入字符串
j:=1; //j表示一个指针,对应time数组,为1表示记录小时,为2表示记录分钟
for i:=1 to length(st) do //一个一个字符循环下来
begin
case st[i] of //用case语句判断
':':j:=j+1; //如果碰到“:”,说明小时已经记录完了,j加1,继续记录分钟
else time[j]:=time[j]*10+ord(st[i])-48; //否则记录时间
end;
end;
if time[1]>12 then //如果小时大于12,说明为下午,进行相应的处理
begin time[1]:=time[1]-12; s:='PM'; end else s:='AM';
writeln(time[1],':',time[2],s); //输出
end.
程序已经调试过了,您给的数据都正确输出。