PAT A1061 Dating(同PAT B1014)

PAT A1061 Dating(同PAT B1014)

PAT A1061 Dating(同PAT B1014)_第1张图片

Sample Input:

3485djDkxh4hhGE 
2984akDfkkkkggEdsb 
s&hgsfdk 
d&Hyscvnm

Sample Output:

THU 14:04
word meaning
case sensitive 区分大小写
white space 空格
  • 思路1:
    1-> 对每对字符串,用2个“指针”同时遍历到短的那个结束
    2-> 对头两个字符串,第一次遍历到相同的(满足要求1:A~D之间),输出对应的星期;继续遍历,第二次相同的(满足要求2:0 ~ 9 或 A ~ N)输出时钟时间
    3-> 对后两个字符串,返回第一次相同的(满足要求3:A ~ Z 或 a ~ z)输出此时的“位置”

  • code1:

#include 
#include 
#include 
using namespace std;
char date[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; //!!!WRONG 1:二维char数组每一行都要多开1位存放'\0' 
int main(){
	string s1, s2;
	cin >> s1 >> s2;
	int j = 0, k = 0;
	bool isFirst = true;
	while(j != s1.size() && k != s2.size()){
		if(s1[j] == s2[k]){
			if(s1[j] >= 'A' && s1[j] <= 'G' && isFirst){
				//!!!:NOTE 1:注意s的范围为A~G,即星期一~星期日 
				printf("%s ", date[s1[j] - 'A']);
				isFirst = false;
			}else if(!isFirst){
				if(('0' <= s1[j] && s1[j] <= '9') || ('A' <= s1[j] && s1[j] <= 'N')){
					//!!!:NOTE 2:注意s的范围为A~G,即星期一~星期日 
					if(s1[j] > '9') printf("%02d:", s1[j] - 'A' + 10);
					else printf("%02d:", s1[j] - '0');
					//!!!:WRONG 2:时钟也要%02d格式化输出 
					break;
				} 
			}
		}
		j++; k++;
	}
	cin >> s1 >> s2;
	j = 0; k = 0;
	while(j != s1.size() && k != s2.size()){
		if(s1[j] == s2[k]){
		//!!!:NOTE 3:注意s的范围为a~z,A~Z
			if((s1[j] >= 'A' && s1[j] <= 'Z') || (s1[j] >= 'a' && s1[j] <= 'z')){
				printf("%02d", j);
				break;	
			}
		}
		j++; k++;
	}
	return 0;
}
  • T2 code:
#include 
using namespace std;
char date[8][4] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};

int main(){
	string s1, s2;
	cin >> s1 >> s2 ;
	int idex = 0;
	bool first = true;
	for(int i = 0; i < s1.size() && i < s2.size(); ++i){
		if(s1[i] == s2[i]){
			if(first){
				if('A' <= s1[i] && s1[i] <= 'G'){
					printf("%s ", date[s1[i] - 'A']);
					first = false;
				} 	
			}else{
				int time = -1;
				if('0' <= s1[i] && s1[i] <= '9') time = s1[i] - '0';
				else if('A' <= s1[i] && s1[i] <= 'N') time = s1[i] - 'A' + 10;
				if(time != -1){
					printf("%02d:", time);
					break;
				}
			}
		}
	}
	cin >> s1 >> s2;
	for(int i = 0; i < s1.size() && i < s2.size(); ++i){
		if(s1[i] == s2[i] && isalpha(s1[i])){
			printf("%02d", i);
			break;
		}
	}
	return 0;
} 
  • T3 code:
#include 
using namespace std;
const char date[8][5] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};

int GetHour(char c)
{
    if('0' <= c && c <= '9') return c - '0';
    else return c - 'A' + 10;
}
int main()
{
    string str[5];
    for(int i = 0; i < 4; ++i)
    {
        cin >> str[i];
    }
    int cnt = 0;
    bool lock_first = true;
    for(int i = 0; i < str[0].size() && i < str[1].size(); ++i)
    {
        char c1 = str[0][i], c2 = str[1][i];
        if(c1 == c2)
        {
            if(lock_first == false && ('0' <= c1 && c1 <= '9' || 'A' <= c1 && c1 <= 'N'))
            {
                printf("%02d:", GetHour(c1));
                break;
            }
            if(lock_first && 'A' <= c1 && c1 <= 'G')
            {
                printf("%s ", date[str[0][i] - 'A']);
                lock_first = false;
            }
        }
    }
    for(int i = 0; i < str[2].size() && i < str[3].size(); ++i)
    {
        if(str[2][i] == str[3][i] && isalpha(str[3][i]))
        {
            printf("%02d", i);
            break;
        }
    }
    return 0;
}

!WRONG : 要加上限制范围:A~G, 0~9+A~N

你可能感兴趣的:(PAT,A,字符串处理)