Explanation
本题使用了#include <ctype.h>
库下的两个函数:
int isdigit(int c); //检查所传的字符是否是十进制数字字符。
int isalpha((int c);//检查所传的字符是否是字母
此外,请注意在申明字符串数组的时候,要考虑\0
需要占用一个字符位置,如下:
//第二维长度声明为5,表示每行最多可存储有5个字符(含'\0')的字符串,
//当初始化列表中提供的字符串长度小于5时,系统将其后剩余的单元自动初始化为'\0'
char day[][5]={"MON ","TUE ","WED ","THU ","FRI ","SAT ","SUN "};
突然好想去学C++
了,用个string
就可以把上面的字符串数组给盖过去了,还不需要考虑长度问题!
Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
char day[][5]={"MON ","TUE ","WED ","THU ","FRI ","SAT ","SUN "};
char text[4][60]; //存储外设输入的四个字符串;
char t[2]; //存储从前两个字符串的对比得到的星期和时钟信息;
int pos; //存储后两个字符对比的位置信息;
int m;
int i,j=0,k=0;//用于计数
for(i=0;i<4; i++)
scanf("%s", &text[i]);
while( j<strlen(text[0]) && j<strlen(text[1])){ //找出星期数
if(text[0][j]==text[1][j] && text[0][j]>='A' && text[0][j]<='G')
{
t[0]=text[0][j];
break;
}
j++;
}
j=j+1;
while( j<strlen(text[0]) && j<strlen(text[1])){ //找出时钟数
if(text[0][j]==text[1][j] && ((text[0][j]>='A' && text[0][j]<='G') || isdigit(text[0][j])))
{
t[1]=text[0][j];
break;
}
j++;
}
while( k<strlen(text[2]) && k<strlen(text[3])) {//找出分钟数
if (text[2][k]==text[3][k] && isalpha(text[2][k])) {
pos = k;
break;
}
k++;
}
m = isdigit(t[1]) ? t[1] - '0' : t[1] - 'A' + 10;
printf("%s%02d:%02d", day[t[0]-'A'], m, pos);
return 0;
}