“第六十七天”

 各位,昨天查找子串的方法想起来了,就是那个KMP算法......自己理解都有点困难,还看看能不能想一下,确实很困难啊。

不要忘了toupper函数和tolower函数不是直接改变字符的大小写,而是返回对应的大小写的值,需要赋值。

这个在需要比较密码的时候,我是先用了一个二维数组,把账号,密码,邮箱三者分开读的,但其实感觉也可以用gets函数一次读入,然后从字符串的末尾开始比较,因为邮箱都在最后,然后以空格为界判断,密码,账号和邮箱。

但通过这个我好像发现这个网站是区分不出来,gets和fgets的,一律都是按gets运行的。

#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int main()
{
	char email[51] = { 0 };
	int n = 0;
	scanf("%s %d", email, &n);

	char(*a)[3][51] = (char*)malloc(sizeof(char) * n * 3 * 51);
	int(*b) = malloc(sizeof(int) * n);

	int i = 0, j = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%s %s %s", a[i][0], a[i][1], a[i][2]);

		if (strcmp(email, a[i][2]) == 0)
		{

			b[j++] = i;

			int na = strlen(a[i][2]);
			int m = 0;

 			for (m = 0; m < na; m++)
			{
				if (islower(a[i][1][m]))
					a[i][1][m] = toupper(a[i][1][m]);
				else
					a[i][1][m] = tolower(a[i][1][m]);
			}
		}
	}

	if (j == 0)
		printf("empty\n");
	else
		for (i = 0; i < j; i++)
		{
			printf("%s %s\n", a[b[i]][0], a[b[i]][1]);
		}

		return 0;
}  

 这个一开始要么错一个,要么对一个,我还以为这个网站憨了,其实是它有一个没有明说的是字符串可能会以空格结尾,所以所以它这测试里面是有一个以空格结尾的,我就要么对这一个,要么就错这一个,对末尾空格的处理也不麻烦,额外判断一下就行,这个打印还是那个,就是要在多个数据中间打印 逗号之类的分隔符,我一开始还是把逗号和前面的绑定打印,后来才记起来之前的和后面绑定,真心感觉和后面绑定比较好处理,切记切记。

 我这里需要额外判断的原因是如果最后为空格的话,会造成越界,其实没有越界,因为定义的数组比较大,但会导致 j 的值多加一,这样后面打印的时候就会多打印一个0(最开始的初值)


int main()
{
	char ch[1001] = { 0 };
	int b[300] = { 0 };
	gets(ch);

	int nc = strlen(ch);
	int i = 0, j = 0;

	for (i = 0; i < nc-1; i++)
	{
		if (!isspace(ch[i]))
			b[j]++;
		else if (!isspace(ch[i + 1]))
			j++;
	}
	if (!isspace(ch[i]))
		b[j]++;

	printf("%d", b[0]);
	for (i = 1; i <= j; i++)
	{
		printf(",%d",b[i]);
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值