
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章 中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )
共 2 行。
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数 -1。示例1
To
to be or not to be is a question2 0输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为0。 示例2
to
Did the Ottoman Empire lose its power at that time-1表示给定的单词 to 在文章中没有出现,输出整数-1。 #include <bits/stdc++.h>
using namespace std;
// 将字符串中的大写字母转换为小写字母
string change(string str) {
for (int i = 0; i < str.length(); i++) {
// 如果字符是大写字母,则转换为小写
if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = str[i] - 'A' + 'a';
}
}
return str; // 返回转换后的字符串
}
int main() {
int index, count = 0; // index 用于存储子字符串的位置,count 用于统计出现次数
string card, sentence; // card 代表要查找的单词,sentence 代表输入的句子
// 输入要查找的单词
getline(cin, card);
card = " " + card + " "; // 在单词前后添加空格,以确保匹配完整单词
// 输入要查找的句子
getline(cin, sentence);
sentence = " " + sentence + " "; // 在句子前后添加空格,确保匹配
// 将单词和句子都转换为小写,进行不区分大小写的比较
card = change(card);
sentence = change(sentence);
// 查找子字符串第一次出现的位置
index = sentence.find(card, 0);
// 统计子字符串在句子中出现的次数
while (index != -1) { // 当找到子字符串时
count++; // 增加计数
index = sentence.find(card, index + 1); // 寻找下一个出现的位置
}
// 输出结果
if (count == 0) { // 如果未找到
cout << "-1"; // 输出 -1 表示未找到
} else {
// 输出出现次数和第一次出现的位置
cout << count << " " << sentence.find(card) << endl;
}
return 0; // 结束程序
}change 函数:用于将输入字符串中的字符转换为小写。该函数遍历字符串的每一个字符,将所有大写字母转换为相应的小写字母。
main 函数:
声明变量 index 用于存储子字符串第一次出现的位置,count 用于统计子字符串的出现次数。
使用 getline 来输入要查找的单词和句子,确保输入包含空格的完整内容。
在查找单词和句子的前后都添加空格,以确保匹配的是整个单词而不是单词的一部分。
将 card 和 sentence 转换为小写字符串,以避免大小写对查找结果的影响。
使用 find 函数查找 card 在 sentence 中第一次出现的位置,并在循环中统计它的总出现次数。
最后根据统计结果输出出现次数和第一次出现的位置,如果未找到则输出 -1。