题解 P1308 【统计单词数】

· · 题解

我的思路比较简单,

核心思路就是将输入的字符串里面的单词单独的看,记录这些单词长度与输入单词长度先进行比较,然后在一个for循环用来判断这个单词与输入的单词想不想等,这里需要注意区分大小写,先把输入的单词和字符串全部转换成大写或者小写,这样就可以了。

我也是脑子有点转不过来,这题看了很久的,每次看都用不同的方法敲,但最终都没有成功,题解里面的看不懂,因为对于我这个新手来说,那么多头文件函数都还没用学,所以题解看的一脸懵逼。

这代码比较通俗易懂,你肯定能看懂的

import java.util.Scanner; public class Main {

public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner in = new Scanner(System.in);
    String s,c;
    c = in.nextLine();
    //将输入的大写字母全部转换为小写字母。
    c = c.toLowerCase();
    s = in.nextLine();
    //将输入的大写字母全部转换为小写字母。
    s = s.toLowerCase();
    int total=0,t1=0;
    int len = s.length();
    for(int i=0; i<s.length(); ) {
        int k = i;
        int book = 0;
        while(k<len && s.charAt(k) != ' ') {
            book++;//book标记输入句子中某个单词的长度。 
            k++;//k作为变量i,用来记录空格的地方,当不满足时,k就是空格的位置。
        }
        if(book == c.length()) {
            int t = 0;//t用来表示输入单词word里面字母位置。 
            int right = 1;
            for(int j=i; j<k; j++) {
                if(c.charAt(t) != s.charAt(j)) {
                    right = 0 ;
                    break;
                }
                t++;
            }
            //right=1表示这个单词跟输入单词一样  
            if(right == 1) {
                total++;
                if(total == 1)
                    t1 = i;//记录第一次单词出现的位置。 
            }
        }
        i = k+1;
        //k为上一个单词尾部的空格,i为此刻表示的单词的第一个字母。
    }
    if(total == 0) System.out.println(-1);
    else System.out.println(total + " " + t1);
}

}

思路就是这样了,至于什么语言,核心思路是这个。

c代码为这个。

include<stdio.h>

include<string.h>

int main() {

char word[10]={0},sentence[1000001]={0};
gets(word);
gets(sentence);
int length_w,length_s,first,sum=0;
int i,j;
length_w=strlen(word);
length_s=strlen(sentence);
//将输入的大写字母全部转换为小写字母。 
for(i=0; i<length_w; i++)
    if(word[i] >= 'A' && word[i] <='Z')
        word[i] += ' ';
for(i=0; i<length_s; i++)
    if(sentence[i] >= 'A' && sentence[i] <='Z')
        sentence[i] += ' ';
for(i=0;i<length_s; ){
    int k = i;
    int book = 0;
    while(k<length_s && (sentence[k]>='a' && sentence[k]<='z')){
        book++;//book标记输入句子中某个单词的长度。 
        k++;//k作为变量i,用来记录空格的地方,当不满足时,k就是空格的位置。 
    }           
    if(book == length_w){
        int t = 0;//t用来表示输入单词word里面字母位置。 
        int right = 1;
        for(j=i; j<k; j++){
            if(word[t] != sentence[j]){
                right = 0;
                break;
            }
            t++;        
        }   
        if(right == 1){//right=1表示这个单词跟输入单词一样   
            sum++;
            if(sum==1)
                first = i;//记录第一次单词出现的位置。 
        } 
    } 
    i = k+1;
    //k为上一个单词尾部的空格,i为此刻表示的单词的第一个字母。 
}
if(sum == 0)
printf("-1");
else    
printf("%d %d",sum,first);
return 0;

}