Algorithm yyds 2021-12-07 20:53 采纳率: 100%
浏览 41
已结题

找单词 (Language:C++)

Description
给定一个单词及一段文章作为输入,请你编程输出这个单词在文章中出现的次数,和单词第一次出现时首字母位于文章中的位置(文章中第一个字符位置为 0,第二个字符位置为1,依此类推,字符包含空格)。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须是文章中独立的单词,不能是某个单词中的一部分。例如:to 和 tomato 不能匹配。

Input
第 1 行为一个字符串,其中只含字母,表示给定单词(1≤字符串长度≤10)第 2 行为一个字符串,其中只包含字母和空格,表示给定的文章(1≤ 文章长度≤100000)。

Output
如果在文章中找到给定单词则输出两个整数,分别是单词在文章中出现的次数和第一次出现的位置,两个整数之间用一个空格隔开。如果单词在文章中没有出现,则直接输出一个整数-1。

Sample Input
To
to be or not to be is a question

Sample Output
2 0

  • 写回答

1条回答 默认 最新

  • bekote 2021-12-07 23:30
    关注
    
    #include <iostream>
    #include <string.h>
    using namespace std;
    
    int main() {
        char tar[15];
        char art[100005];
        cin.getline(tar,15);
        cin.getline(art,100005);
        int n=strlen(art);
        int m=strlen(tar);
        //先统一转小写
        for(int i=0;i<n;i++){
            if(art[i]>='A'&&art[i]<='Z')art[i]+=32;
        }
        for(int i=0;i<m;i++){
            if(tar[i]>='A'&&tar[i]<='Z')tar[i]+=32;
        }
        int f=-1,count=0;
        int j,k;
        for(int i=0;i<n;i++){
            //不是第一个字母或前面没空格,不用比较
            if(i!=0&&art[i-1]!=' ')continue;
            j=0;
            k=i;
            while(tar[j++]==art[k++]&&j<m){}
            //找到相同的,并且后面是空格或者是最后一个字母,则是一样的单词
            if(j==m && (art[k]==' '||k==n)){
                if(f==-1)f=i;
                count++;
                i=k-1;
            }
        }
        if(count==0)printf("-1");
        else printf("%d %d",count,f);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月7日