第六章 函數-1400:統計單詞數

1400:統計單詞數

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 14575 通過數: 4604
【題目描述】
一般的文本編輯器都有查找單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。

現在,請你編程實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即給定單詞必須與文章中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例1),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2)。

【輸入】
第 1 行爲一個字符串,其中只含字母,表示給定單詞;

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

【輸出】
只有一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從0開始);如果單詞在文章中沒有出現,則直接輸出一個整數-1。

【輸入樣例】
To
to be or not to be is a question
【輸出樣例】
2 0
【提示】
樣例輸入:

樣例 #2:

to
Did the Ottoman Empire lose its power at that time
樣例輸出:

樣例 #2:

-1


思路:輸入單詞,輸入句子,記錄單詞的長度,記錄句子的長度,將字符從小寫轉爲大寫,按句子中每個單子長度進行雙重循環,若字符不匹配退出循環,再從第i+1個開始判定,若第i個字符不是文章首且前一個字符不是空格,則不是獨立單詞,退出循環,若循環判定通過,且該單詞詞尾爲文章尾或後有空格,然後累加滿足條件單詞數,若第一次出現,記錄位置,打印答案。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
 
int main()
{
    string word,sen;
    int len1,len2;
    int i,j;
    int ans=0,dir;
 
    getline(cin,word);//輸入單詞
    getline(cin,sen);//輸入句子
    len1 = word.size();//記錄單詞的長度
    len2 = sen.size();//記錄句子的長度
 
    for(i = 0; i < len2; i++)
    {
        for(j = 0; j < len1; j++)
        {
            if(toupper(sen[i+j]) != toupper(word[j]))	
                break;//若字符不匹配退出循環,再從第i+1個開始判定
            if(i > 0 && sen[i-1] != ' ')	
                break;//若第i個字符不是文章首且前一個字符不是空格,則不是獨立單詞,退出循環
        }
        if(j == len1 && (sen[i+j] == ' ' || j+i == len2))//若循環判定通過,且該單詞詞尾爲文章尾或後有空格
        {
            ans++;//累加滿足條件單詞數
            if(ans == 1)//若第一次出現
                dir = i;//記錄位置
        }
    }
    if(ans)	
        cout << ans <<" "<< dir <<endl;
    else	
        cout << "-1" << endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章