社区讨论
求助,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 条回复,欢迎继续交流。
正在加载回复...