统计单词数
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1), 如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例 2)。
输入格式
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字 母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数 ?1。
数据规模与约定
1≤ 单词长度 ≤10;
1≤ 文章长度 ≤1,000,000。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
To
to be or not to be is a question
样例输出1
2 0
样例输入2
to
Did the Ottoman Empire lose its power at that time
样例输出2
-1
题目来源
NOIP 2011 普及组
提示:
样例 1 中输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为 0。
样例 2 中表示给定的单词 to 在文章中没有出现,输出整数 -1。
问题链接:JSK-27321 统计单词数
问题描述:(略)
问题分析:
????这是一个字符串匹配问题,可以有多种解法。
????一种做法是使用字符串匹配函数strstr()来解,这时候单词和文本字符串两端都先加上一个空格,然后再进行匹配。这样做比较方便,能够确保正确切分单词。也可单纯用字符串匹配的方法来实现。
程序说明:(略)
参考链接:(略)
题记:能用库函数则用库函数。
AC的C语言程序如下:
/* JSK-27321 统计单词数 */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define N 10
#define N2 1000000
char word[N + 3], text[N2 + 3];
int main(void)
{
gets(word + 1);
gets(text + 1);
int i;
for(i = 1; word[i]; i++)
if(isupper(word[i]))
word[i] = tolower(word[i]);
for(i = 1; text[i]; i++)
if(isupper(text[i]))
text[i] = tolower(text[i]);
int cnt = 0, firstpos, len;
len = strlen(text + 1) + 1;
text[0] = ' ', text[len] = ' ', text[len + 1] = '\0';
len = strlen(word + 1) + 1;
word[0] = ' ', word[len] = ' ', word[len + 1] = '\0';
char *pos = text;
while(*pos) {
pos = strstr(pos, word);
if(pos == NULL)
break;
else {
if(++cnt == 1)
firstpos = pos - text;
pos += len;
}
}
if(cnt == 0)
printf("-1\n");
else
printf("%d %d\n", cnt, firstpos);
return 0;
}
原文地址:https://www.cnblogs.com/tigerisland45/p/9743279.html