社区讨论

求助,40分,4AC,3WA,3RE

P1308[NOIP 2011 普及组] 统计单词数参与者 2已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi7pntcr
此快照首次捕获于
2025/11/21 01:34
4 个月前
此快照最后确认于
2025/11/21 01:34
4 个月前
查看原帖
CPP
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char a[10], b[1000005];
void low(char *pa)
{
	for (int i = 0; pa[i]; i++)
		if (isupper(pa[i])) pa[i] = tolower(pa[i]);
}
int main()
{

	int num = 0, sex = -1, l, m, n;
	gets(a);
	gets(b);
	low(a);
	low(b);
	int len = strlen(a);//计算要找的单词长度,循环用
	for (int i = 0; b[i]; i++)                      //循环到字符串结束
	{
		if((b[i]==a[0]&&b[i-1]==' ')||(b[i]==a[0]&&i==0))   //找到匹配 t  并且文章t前面是空格,特殊条件就是第一个就是t
		{
			for (l = i; b[l] != ' '&&b[l]!='\0' ; l++);  //从文章这个t计算到空格 就是这个单词的长度
			//printf("%d\n", l);
			if (l - i == len)            //单词长度相等  
			{
				for (m = 0, n = i; m < len; m++, n++)   //开始一一对应
				{
					if (a[m] == b[n]) continue;       //匹配就继续直到结束
					else
					{
						i += l;              //中间有偏差 让i+l 就是到这个单词的下一个单词首字母
						break;
					}
				}
				if (m == len)   //循环完成并且没有中途break  就是相同的词
				{
					if (sex == -1) sex = i;    //sex就是单词出现的首位置赋值,下次出现就不会满足,没有这个词就是-1
					num++;   //个数+1
					i += l;   //刷新位置到下一个单词
				}
			}
			else  //如果单词长度不匹配
			{
				for (l = i;  b[l] != ' '&&b[l] != '\0'; l++);  //计算这个单词长度,直接跳到下个单词继续找
				i += l;
			}
		}
		//printf("%d %c\n", i,b[5]);
	}
	if (sex == -1) printf("-1");
	else printf("%d %d", num, sex);
	system("pause");
	return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...