题目入口1014福尔摩斯的约会 (20)
题意:题意刚开始理解错了,他说的应该是两个字符串同一位置的字符是否相等,我理解成,不管在哪个位置,找先后两个相等的字符。
写的时候要注意在循环找到第一组相等的之后,继续查找第二组相等的,而不是重新查找
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<time.h>
#include<vector>
#define ll long long
using namespace std;
char wek[10][10] = {"","MON","TUE","WED","THU","FRI","SAT","SUN"};
int main()
{
string s[4];
int len[4];
int week,hour,minute;
for(int i=0; i<4; ++i){
cin>>s[i];
len[i] = s[i].length();
}
int i,j;
int flag = 0;
for(i=0; i<len[0]&&i<len[1]; ++i){
if(isupper(s[0][i])&&s[0][i]==s[1][i]){
week = s[0][i]-'A'+1;
//if找到后,直接接着后面查找
for(j=i+1; j<len[0]&&j<len[1]; ++j){
if(isupper(s[0][j])||s[0][j]<='9'&&s[0][j]>='0'){
if(s[0][j]==s[1][j]){
if(isupper(s[0][j])){
hour = s[0][j]-'A'+10;
}
else
hour = s[0][j]-'0';
flag = 1;
break;
}
}
}
if(flag==1)
break;
}
}
for(i=0; i<len[2]&&i<len[3]; ++i){
if(s[2][i]>='a'&&s[2][i]<='z'||s[2][i]>='A'&&s[2][i]<='Z'){
if(s[2][i]==s[3][i]){
minute = i;
break;
}
}
}
//cout<<s[2][minute]<<' '<<s[3][minute]<<' ';
printf("%s ",wek[week]);
printf("%02d:%02d",hour,minute);
return 0;
}
补一下知识:
#include <ctype.h>
int isalpha( int ch );
功能:如果参数是字母字符,函数返回非零值,否则返回零值。
int isalnum( int ch );
功能:如果参数是数字或字母字符,函数返回非零值,否则返回零值。
int isdigit( int ch );
功能:如果参数是0到9之间的数字字符,函数返回非零值,否则返回零值.
int islower( int ch );
功能:如果参数是小写字母字符,函数返回非零值,否则返回零值。
int isupper( int ch );
功能:如果参数是大写字母字符,函数返回非零值,否则返回零值。