关于此题的输入
查看原帖
关于此题的输入
776668
Gaogao2011楼主2023/5/30 08:50
  • 错误代码(5个点全为 RE):
#include <iostream>
#include <cstring>
using namespace std;
int hang[10] = {0,1,1,1,2,2,2,3,3,3},
	lie[10] = {0,4,5,6,4,5,6,4,5,6},
	djx1[10] = {0,7,0,0,0,7,0,0,0,7},
	djx2[10] = {0,0,0,8,0,8,0,8,0,0};
int x[2][9];
string s;
int main() {
	getline(cin, s);
    int len = s.size();
    for (int i = 0; i < len; i++) {
        x[i%2][hang[s[i]-'0']]++;
        x[i%2][lie[s[i]-'0']]++;
        x[i%2][djx1[s[i]-'0']]++;
        x[i%2][djx2[s[i]-'0']]++;
    }
    for (int i = 1; i <= 8; i++) {
    	if (x[0][i] == 3) {
			printf("xiaoa wins.\n");
			return 0;
		}
    	else if (x[1][i] == 3) {
			printf("uim wins.\n");
			return 0;
		}
	}
    printf("drew.\n");
    return 0;
}

正确代码(AC):

#include <iostream>
#include <cstring>
using namespace std;
int hang[10] = {0,1,1,1,2,2,2,3,3,3},
	lie[10] = {0,4,5,6,4,5,6,4,5,6},
	djx1[10] = {0,7,0,0,0,7,0,0,0,7},
	djx2[10] = {0,0,0,8,0,8,0,8,0,0};
int x[2][9];
string s;
int main() {
	cin >> s;
    int len = s.size();
    for (int i = 0; i < len; i++) {
        x[i%2][hang[s[i]-'0']]++;
        x[i%2][lie[s[i]-'0']]++;
        x[i%2][djx1[s[i]-'0']]++;
        x[i%2][djx2[s[i]-'0']]++;
    }
    for (int i = 1; i <= 8; i++) {
    	if (x[0][i] == 3) {
			printf("xiaoa wins.\n");
			return 0;
		}
    	else if (x[1][i] == 3) {
			printf("uim wins.\n");
			return 0;
		}
	}
    printf("drew.\n");
    return 0;
}

两份代码之间只是输入方式不同,前者使用 getline(cin,s),后者使用 cin >> s,而结果天差地别。

请问这是为什么?getline是有什么机制吗?

2023/5/30 08:50
加载中...