随笔 - 14  文章 - 0  评论 - 0  阅读 - 279

查找相同单词

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例 2)。

输入格式

共 2 行。

第 1 行为一个字符串,其中只含字母,表示给定单词;

第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数z和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 $$ 开始);如果单词在文章中没有出现,则直接输出一个整数 -1。

注意:空格占一个字母位

                                                                                                                                     思路:出现位置查找【次数累加】,指针指向第几个空格,输入样例,八个单词,九个空格【字符串前面添加空格】:指向第一个空格,0号位置,

                                                                                                                                      1.读取查找单词,定义指针*p;统计目标文章中的空格数,空格数加一,获取定义字符串数组的长度;读取目标文章,存储进字符串数组【多维数组】.

                                                                                                                                      1.大小写转换,指针检测到大写字母,替换成小写;2.字符匹配函数,定义循环,统计次数。

实现顺序:

主函数部分【基本工作,初始化】

1.获取第一行输入,大小写转换,定义为指针类型;获取第二行输入,大小写转换。

2.获取定义字符串数组的长度;读取目标文章,存储进字符串数组【多维数组】 ;为字符串添加前置空格,统计目标文章中的空格数,

自定义函数部分

1.字符对比函数

2.定位函数

 

输入样例:

To
to be or not to be is a question

输出样例:

2 0

输入样例:

to
Did the Ottoman Empire lose its power at that time

输出样例:

-1



#include <stdio.h>
#include <string.h>
//要实现找到字符第一次出现的位置strstr
#include <ctype.h>//要使用tolower函数

void toLower(char *str) {//实现大写转小写
for (int i = 0; str[i]; i++) {//循环,遍历每一个字符
str[i] = tolower(str[i]);
}
}

int main() {
char a[1000], s[1000], tempA[1000], tempS[1000];//初始化定义数组大小
//作用分别是
fgets(a, 1001, stdin);
fgets(s, 1001, stdin);
//获取输入,用fgets而不是其他输入方式。我们要获取的类型是字符串

a[strcspn(a, "\n")] = '\0';
s[strcspn(s, "\n")] = '\0';//移除字符串后的换行符,并替换为字符串的结束标志\0

toLower(a);//调用函数,让所需查找的单词和目标文章全部大写转小写
toLower(s);

snprintf(tempA, sizeof(tempA), " %s ", a);
snprintf(tempS, sizeof(tempS), " %s ", s);//让所需查找的单词和目标文章全部首尾添加空格。
//对文本完成基本的修改


char *pos = strstr(tempS, tempA);
//strstr的作用
//该指针的作用是
if (!pos) {
printf("-1\n");
} else {
int x = pos - tempS;
int sum = 0;
while (pos) {
sum++;
pos = strstr(pos + 1, tempA);
}
printf("%d %d\n", sum, x);
}

return 0;
}

posted on   qh2028  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示