用户名,登录密码,以及注册时所使用手机号码。

用户名,登录密码,以及注册时所使用手机号码。小华在这些网站上也注册了很多的账号,注册时对不同网站使用的用户名和密码都是不一样的,但绑定的手机号都是相同的,列表中信息很多,小华需要在这些信息当中找到自己的账号,然后把自己的密码改掉。注册时使用的用户名虽然不同,但绑定的手机号是一样的,所以小华可以根据自己的手机号来确定哪些是自己的账号了,找到账号之后可以对密码进行修改,修改密码的规则也很简单:将大小写字母互换即可,即如果是大写字母就转化为小写字母,若为小写字母就转化为大写字母。你可以帮助小华完成查找账号和修改密码的任务吗?
 

输入格式:

第一行:输入一个仅包含数字的字符串,表示小华在注册这些账号时所使用的手机号;
第二行:输入一个整数n,表示泄露的数据一共有n条。
接下来的n行:每一行包含三条信息,分别表示在不同网站上注册的用户名,密码以及手机号。它们之间用单个空格分开。用户名、密码、手机号均不含空格,且长度不超过50个字符。

输出格式:

有若干行,每行为一个账号,包括:账号,修改后的密码(之间用单个空格分隔)。
如果没有小华的账号,则输出empty。

输入样例1:
13612348765
5
helloKitty iLoveCats 13612348765
2012 maya2012 13256566565
KittyCat 5iKitty 13612348765
program password 16898765432
whoAmi Feb.29$ 13612348765
输入样例2:
13612348765
1
2012 maya2012 13612348788

输出样例1:
helloKitty IlOVEcATS
KittyCat 5IkITTY
whoAmi fEB.29$
输出样例2:
empty

首先说一下我的解题思路:因为信息比较多,有用户名,密码,手机号。我们可以建立一个结构体数组,结构体内容包含字符型的用户名,密码,手机号如:

struct S
{
	char name[60];
	char key[60];
	char number[60];
};

每个数组的元素都包含这些内容:

struct S arr[n];

n为信息条数。

对于小华的真实手机号,我们可以单独建立一个数组

	char num[60];
	scanf("%s", num);

然后就开始去解题了,我们对结构体数组中的每个元素对其number和真实的手机号num进行比较如果全部都匹配则可以进一步对其密码(key)数组大小写进行转换。然后打印,如果匹配失败,直接break结束就行。然后对结构体数组的下一个元素进行以次比较。对于特殊情况,一次匹配都没有成功,进行标志性处理,输出empty就行了。大致思路就是这些,下面是代码。

#include <stdio.h>
struct S
{
	char name[60];
	char key[60];
	char number[60];
};
int main()
{
	char num[60];
	scanf("%s", num);
	int n;
	scanf("%d", &n);
	struct S arr[n];//VS2022会对arr[n]报错,n为未知量
	int i = 0;
	while (i < n)
	{
		scanf("%s%s%s", &arr[i].name, &arr[i].key, &arr[i].number);
		i++;
	}
	int j = 0;
	int op;
	int cnt = 0;//有无匹配成功标志
	while (j < n)
	{
		int k = 0;
		op = 1;
		while (num[k] != '\0')
		{
			if (num[k] == arr[j].number[k])
			{

			}
			else
			{
				op = 0;
				break;
			}
			k++;
		}
		if (op)
		{
			cnt = 1;
			int l=0;
			while (arr[j].key[l]!='\0')
			{
				if (arr[j].key[l] >= 'A' && arr[j].key[l] <= 'Z')
				{
					arr[j].key[l] = arr[j].key[l] + 32;
				}
				else if (arr[j].key[l] >= 'a' && arr[j].key[l] <= 'z')
				{
					arr[j].key[l] = arr[j].key[l] - 32;
				}
				else
				{

				}
				l++;
			}
			printf("%s %s\n", arr[j].name, arr[j].key);
		}
		j++;
	}
	if (!cnt)
	{
		printf("empty");
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值