社区讨论

60分求助

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

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mi7yua6h
此快照首次捕获于
2025/11/21 05:51
4 个月前
此快照最后确认于
2025/11/21 05:51
4 个月前
查看原帖
做法有点奇怪,根据当前读入的字符在线匹配,没有存正文,WA了4个点,求dalao指点
CPP
#include<cmath>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

int k,ans,ans1=-1,pos=-1,n;
//ans记录出现次数,ans1记录第一次位置,pos记录临时位置,k记录当前匹配的字符个数 
char sam[12],tmp;
//sam存储需要查找的,tmp存储当前读入的字符 
bool pd=true;
//判断是否匹配 

int main(){
	scanf("%s",sam);
	for(int i=0;i<=strlen(sam)-1;++i){
		if(isupper(sam[i])) sam[i]=tolower(sam[i]);
	}
	scanf("%c",&tmp);
	while(tmp=='\n'||tmp=='\r') scanf("%c",&tmp);//读到第一个正文字符 
	while(tmp!='\n'&&tmp!='\r'){
		if(tmp==' '){//一个单词结束,判断是否匹配 
			if(pd&&k==strlen(sam)) ans++;
			pd=true;
			k=0;
			if(pos!=-1&&ans1==-1) ans1=pos;
		}
		else if(pd){
			if(isupper(tmp)) tmp=tolower(tmp);
			if(tmp!=sam[k]) pd=false,pos=-1,k=0;//不匹配,还原数据 
			else k++;//匹配,准备判断下一位 
			if(k==1&&ans1==-1) pos=n;//第一位匹配,记录位置 
		}
		n++;
		scanf("%c",&tmp);
	}
	if(ans) printf("%d %d",ans,ans1);
	else printf("-1");
	return 0;
}

回复

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

正在加载回复...