统计单词个数
题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
输入格式
共2行。
第1行为一个字符串,其中只含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
输入输出样例
输入
To
to be or not to be is a question
输出
2 0
输入
to
Did the Ottoman Empire lose its power at that time
输出
-1
说明/提示
数据范围
1≤单词长度≤10。
1≤文章长度≤1,000,000。
代码示例:
#include<iostream>
using namespace std;
string s[1000001];
int main() {
string s1, s2, s3="";
int word_num=0,sum=0;
int index=0;
int first_index=-1;
bool isnot=true;
// 有一个使用getline(),最好都用getlline().
getline(cin, s1);
getline(cin, s2);
int len = s2.length();
// 字母全部转为小写.
string s11="", s22="";
for (int i=0; i<s1.length(); i++) {
if (s1[i] >= 'A' && s1[i]<='Z'){
s11 += s1[i]+32;
}else {
s11 += s1[i];
}
}
for (int i=0; i<s2.length(); i++) {
if (s2[i] >= 'A' && s2[i]<='Z'){
s22 += s2[i]+32;
}else {
s22 += s2[i];
}
}
for (int i=0; i<len; i++) {
if (s22[i]!=' '){
s3 += s22[i];
}
if (s22[i]==' ' || i==len-1) {
word_num++;
s[index++] = s3;
if (isnot) {
if (s3==s11) {
first_index = i-s11.length();
isnot = false;
}
}
s3="";
}
}
for (int i=0; i<word_num; i++) {
if (s11==s[i]){
sum++;
}
}
if (sum==0) {
cout<<-1;
}else {
cout<<sum<<" "<<first_index;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现