11-散列3-QQ帐户的申请与登陆-编程题 解题代码测试结果--scanf测试结果--cin问题整理 解题代码 #include<iostream> #include<map> #include<stdio.h> #include<string> using namespace std; map<string, string> m; int main() { int N; char judge; cin >> N; for (int i = 0; i < N; i++) { string a, b; a.resize(11); b.resize(17); scanf("\n%c %s %s", &judge, &a[0], &b[0]); //cin >> judge >> a >> b; switch (judge) { case 'N': if (m[a] == "") { m[a] = b; cout << "New: OK\n"; } else cout << "ERROR: Exist\n"; break; case 'L': if (m[a] == "") cout << "ERROR: Not Exist\n"; else if (m[a] == b) cout << "Login: OK\n"; else cout << "ERROR: Wrong PW\n"; break; } } return 0; } 测试结果–scanf 测试结果–cin 问题整理 1.该题较为简单,测试了cin和scanf的速度差,确实非常大。 2.cin输入中没问题,但scanf中推荐每次都像重新申请的string中写入,现在没时间深入研究,可以肤浅理解如下。 3.cin和string本就属于c++一体,重载什么的不会出现错误。 4.但scanf向再利用的string中写入后和初次的string有区别,会造成之后的对比等等操作出现无法预测的状况。 5.因此如果想用scanf替代cin,建议每次使用的string都是新申请的string。 6.对了,用scanf时需要提前申请string的空间,而且要预留\0的位置。