洛谷p1308统计单词数

如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。
#include
#include
using namespace std;
void convert(string &p);
int main(void)
{
string key;
string data;
int flag = 0;
int demo = -1;
getline(cin,key);
getline(cin,data);
convert(data);
convert(key);
int i = 0; int j = 0;
while(data[i] != ‘\0’)
{
if(flag == 0)
{
demo = i;
}//利用变量demo来记录,所以只要flag不等于0,就说明第一词尚未出现,demo=i;继续改变demo,直到flag > 0,说明第一词已经出现,就不用改变demo了
while(data[i] == key[j])
{
if(key[j+1] == ‘\0’ && (data[i+1] == ’ ’ || data[i+1] == ‘\0’))
{
flag++;
break;
}
else
{
j++;
i++;
}
}//条件循环(data[i] != ‘\0’)来完成对第二行data的搜索,然后就用条件判断(key[j] == data[i] )来判断第一个字符是否匹配,如果匹配,我就来检测(data[i+1] ==空格/或者是结束符 and key[j+1]==结束符),如果key后一项是结束符,并且data下一项为空格,说明两个单词完全相等,判断data下一项是不是结束符,非常有必要,否则就会读取非法内存!!!这个是核心。
j = 0;//从头开始检测
while(data[i++] != ’ ’ && data[i] != ‘\0’)
{
}//所以一旦key和data的某一个单词不匹配,你应该跳过该单词剩下的所有字母,使用while(data[i++] != ’ ’ && data[i] != ‘\0’){} 来跳过剩下的字母,直到遇到空格或者data的最后一项,不能忘记j=0,key也要从头开始检测。
}
if(flag != 0)
cout << flag << " " << demo;
else
cout << -1;
return 0;
}
void convert(string &p)
{
int i = 0;
while(p[i] != ‘\0’)
{
if(p[i] >= ‘A’ && p[i] <= ‘Z’ )
p[i] += 32;
i++;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值