7-15 QQ帐户的申请与登陆 (25分)
这一题知识点与7-14基本上是一样的,都是用的散列。
AC的代码:
//将QQ号的类型从数字型改为字符串型后,成功AC。 #include <iostream> #include <string> #include <cstring> using namespace std; long N; typedef struct user { char num[20]; char pass[200]; struct user* next; }node; typedef node* node_ptr; node_ptr* createtable(unsigned int size) { node_ptr* T = new node_ptr[N]; for (unsigned int i = 0; i < size; i++) { T[i] = new node; T[i]->next = NULL; } return T; } typedef unsigned long long Index; Index hash_(char* key, unsigned int tablesize) { Index hash_val = 0; while (NULL != *(key+5)) { hash_val = (hash_val << 5) + *(key++); } return hash_val % tablesize; } void apply(char* num, char* s2, node_ptr* T) { Index hash_val = hash_(num, N); node_ptr s = T[hash_val]; while (NULL != s->next) { s = s->next; if (!strcmp(s->num,num)) { cout << "ERROR: Exist" << endl; return; } } if (NULL == s->next) { node_ptr temp = new node; strcat(temp->num,num); strcpy(temp->pass, s2); temp->next = NULL; s->next = temp; cout << "New: OK" << endl; return; } } void login(char* num, char* s2, node_ptr* T) { Index hash_val = hash_(num, N); node_ptr s = T[hash_val]; while (NULL != s->next) { s = s->next; if (!strcmp(s->num , num)) { if (!strcmp(s->pass, s2)) { cout << "Login: OK" << endl; } else cout << "ERROR: Wrong PW" << endl; return; } } if (NULL == s->next) { cout << "ERROR: Not Exist" << endl; return; } } int main() { cin >> N; char s1[20]; char str2[200]; node_ptr* T = createtable(N); char order; for (unsigned int i = 0; i < N; i++) { cin >> order; if (order == 'N') { cin >> s1; cin >> str2; apply(s1, str2, T); } else if (order == 'L') { cin >> s1; cin >> str2; login(s1, str2, T); } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言