1 条题解
-
0
其实读入文章用fget函数更好,且可以在读入后用<ctype.h>库中的tolower函数进行大小写的统一化,这样判定条件就没那么多了;还可以将判断字符是否相等单独作为一个函数。但考虑到这是新手村,所以我用最简朴的语言写了。
我也是新手,大佬轻点喷。#include <stdio.h> #include <string.h> int main(){ char word[10];// 定义一个字符数组 w,用于存储要查找的单词 char essay[1000000];// 定义一个字符数组 e,用于存储待查找的字符串 scanf("%s",word);//读入给定单词 getchar();//如果没有这行,第二个scanf会读入第一行末的换行符,导致第二个字符串为空 scanf("%[^\n]",essay);//读入文章,到换行符为止。注意:用%s读入读到空格就会停。 int l1 = strlen(word);// 计算单词 w 的长度 int l2 = strlen(essay); int count = 0;//计数 int index = -1;//记录第一个出现的位置 //开始遍历 for(int i = 0;i <= l2 - l1;i++){ //判断文章中是否有给定单词。需要满足三个条件:第一个符合的字母前是空格或者行首,单词长度为l1,单词中每个字母都符合 // 判断当前位置是否为单词的起始位置 if((i == 0 || essay[i-1] == ' ') && ((essay[i] == word[0]) || (essay[i] - 'A' == word[0] - 'a') || (essay[i] - 'a' == word[0] - 'A')) && (essay[i+l1] == ' ' || essay[i+l1] == '\0')){ // 在当前位置开始匹配单词 w for(int j = 0;j < l1;j++){ // 如果当前字符不匹配,且大小写转换后也不匹配,则停止匹配 if(essay[i+j] != word[j] && (essay[i+j] - 'A') != word[j] - 'a' && (essay[i+j] - 'a' != word[j] - 'A')) break; // 如果匹配到了单词的最后一个字符,则表示找到了一个完整的单词 if(j == l1 - 1 ) { count++; if(index == -1) index = i; } } } } if(count) printf("%d %d",count,index); else printf("-1"); return 0;}
信息
- ID
- 5366
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 332
- 已通过
- 96
- 上传者