AcWing 446. 统计单词数
原题链接
简单
作者:
繁花似锦
,
2020-01-29 21:50:10
,
所有人可见
,
阅读 2567
这题关键在于:防止识别在单词内
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string a,b;
getline(cin,a); // 读入一行
getline(cin,b);
transform(a.begin(), a.end(), a.begin(), ::tolower); //转小写
transform(b.begin(), b.end(), b.begin(), ::tolower);
a=' ' + a + ' '; // 防止识别在单词内
b=' ' + b + ' ';
int pos=b.find(a); //find()函数找到返回第一次下标,否则返回-1
int idx=0,res=0;
if(pos != -1){
idx=pos;
while(pos != -1){
res ++ ;
pos=b.find(a,pos+1);
}
}else{
cout<<-1<<endl;
return 0;
}
cout<<res<<" "<<idx <<endl;
return 0;
}
需不需要再加一个getline解决换行输入问题(可能题目不一样
为什么输出-1要直接加一个return 0呢,知道不加程序就错了,但是不理解为什么要加啊
如果不加return 0.程序会继续执行cout<<res<<” “<<idx <<endl
为什么前后加空格就能避免 to不在ottoman中找到呢
前后加空格,’to’变成’ to ‘,此时查找的是四个字符,只有b里面有单个的to(前后有空格)才能匹配上,而ottoman里面不是ot to man,找不到。
为什么这么转小写不可以呢?
不好意思s[i] <= ‘Z’就可以了
a=’ ‘ + a + ‘ ‘; // 防止识别在单词内
b=’ ‘ + b + ‘ ‘;
能问一下这个是什么意思吗
拿样例2举例,如果前后不加空格,
to
会被Ottoman
中找到,这样也会算作一个单词,但题目规定如果给定单词仅是文章中某一单词的一部分则不算匹配
谢谢啦,理解了
麻烦问一下,这两行是怎么进行修改的?看不懂QAQ......
tql
tql