20分求助,求大佬看一下代码思路有没有问题(C++)
查看原帖
20分求助,求大佬看一下代码思路有没有问题(C++)
787061
Payton123楼主2023/1/8 11:12

代码如下,只能过2,4测试点,1测试点

td
  Td tLWCsrmt

跑出来的结果是

1 0

但是还是无法通过,代码如下

#include<bits/stdc++.h>
using namespace std;
int main() {
	string word,doc;
	int first=-1,sum=0,spaceSum=0;
	getline(cin,word);//读取单词
	//cin.ignore(INT_MAX,'\n');
	getline(cin,doc);//读取文档
	//全部转换为小写字母
	for(int i=0; i<doc.size(); i++) {
		if(isalpha(doc[i])) {
			doc[i]=tolower(doc[i]);
		}
	}
	for(int i=0; i<word.size(); i++) {
		if(isalpha(word[i])) {
			word[i]=tolower(word[i]);
		}
	}
	int i=0;
	while(doc[i]==' ') {//跳过文章前面的空格
		i++;
	}
	for(; i<doc.size(); i++) {//开始从第一个单词开始的第一个字母开始搜索
		int equal=1,wordLength=0;//设是否相等和单词长度
		for(int k=i; doc[k]!=' '&&doc[k]!='\0'; k++) {//求得单词长度
			wordLength++;
		}
		for(int j=0; j<word.size(); j++) {//如果在word的范围内有字母不同则单词不同
			if(doc[i+j]!=word[j]) {
				equal=0;
				break;
			}
		}
		if(wordLength!=word.size()) {//如果单词长度不同则单词不同
			equal=0;
		}
		if(equal==1&&sum==0) {//记录第一次出现
			//cout<<spaceSum+1<<' ';
			first=spaceSum;
		}
		if(equal==1) {//记录出现次数
			sum++;
		}
		equal=1;//initilize
		while(doc[i]!=' '&&doc[i]!='\0') {//让i跳到下一个单词的第一个字母
			i++;
		}
		spaceSum++;
	}
	if(sum>0) {
		cout<<sum<<' '<<first;
	} else {
		cout<<first;
	}
	return 0;
}

在此感谢大佬们

2023/1/8 11:12
加载中...