11-散列3-QQ帐户的申请与登陆-编程题

11-散列3-QQ帐户的申请与登陆-编程题

解题代码

#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的位置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值