11.12 acm培訓題Problem F: 尋找單詞__acm訓練

來源:互聯網
上載者:User
Description

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

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

多組輸入,至EOF結束。

每組2 行。
第 1 行為一個字串,其中只含字母,表示給定單詞;
第 2 行為一個字串,其中只可能包含字母和空格,表示給定的文章。文章字元最多100000個字元 Output

每組只有一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從0開始);如果單詞在文章中沒有出現,則直接輸出一個整數-1。 Sample Input To to be or not to be is a question to Did the Ottoman Empire lose its power at that time Sample Output

2 0

-1

思路:

一開始思路歪了。用了掃描法。結果被空格和第一個字元和最後一個字元的特殊情況討論暈了。

後來問了馬中行。告訴我要用空格分割單詞。一個單詞一個單詞找。然後 我還是用了強化版掃描法2333.掃描空格嘛。

坑比較多。慢慢填。

注意統一大小寫。

代碼:


#include <stdio.h>#include <string.h>int main(){    char a[1100], b[1000001];    while(gets(a)!=NULL)    {        gets(b);        strcat(a," ");        strcat(b," ");//在ab後各加一個" ",減小配對的難度        int i, s, n=0, l, j, ss=0, k, rec;        for (i = 0; a[i] != '\0'; i++)        {            if (a[i] >= 'a')                a[i] -= 'a' - 'A';        }        for (i = 0; b[i] != '\0'; i++)        {            if (b[i] >= 'a')                b[i] -= 'a' - 'A';        } //統一ab的大小寫        for (i = 0; b[i] != '\0'; i++)        {            if (b[i] == ' ')            {                s=1;                for (j = n,k = 0; j <= i, a[k] != '\0'; j++, k++)                {                    if(b[j] == a[k])                    {                        s*=1;//用s來記錄各個位能否對應,如果結果是1就正確,一位不對s就變成0                    }                    else                    {                        s*=0;                    }                }                if (s == 1)                {                    ss++; //如果每次都對就增加符合的次數                }                if (ss == 1 && s==1)                {                    rec = n; //記錄第一次符合的位元                }                n=i;                n++;            }        }        if (ss == 0)        {            ss = -1;            printf("%d\n", ss);        }        else if (ss >= 1)        {            printf("%d %d\n", ss, rec);        }    }    return 0;}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.