1. 程式人生 > 其它 >統計單詞個數

統計單詞個數

題目描述
一般的文字編輯器都有查詢單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。

現在,請你程式設計實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即給定單詞必須與文章中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例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;
}