题解 P1308 【统计单词数】
Clannad111 · · 题解
我的思路比较简单,
核心思路就是将输入的字符串里面的单词单独的看,记录这些单词长度与输入单词长度先进行比较,然后在一个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;
}