问题描述
编写一个程序,输入一个字符串(长度不超过80),然后统计出该字符串当中包含有多少个单词。例如:字符串“this is a book”当中包含有4个单词。
输入格式:输入一个字符串,由若干个单词组成,单词之间用一个空格隔开。
输出格式:输出一个整数,即单词的个数。
输入输出样例
用户输入数据样例:
this is a book
系统输出数据如下:
4
输入格式:输入一个字符串,由若干个单词组成,单词之间用一个空格隔开。
输出格式:输出一个整数,即单词的个数。
输入输出样例
用户输入数据样例:
this is a book
系统输出数据如下:
4
这个题并不难,但是它涉及了一个非常小的知识点,这个需要我自己去记忆。
首先分析一下,依照题目要求,输入一个字符串,然后得出对应的单词数,判断条件,当遇到空格时,单词数目加一,如何判断空格,这时可以利用ASCII码,那么关键是如何只输入一个字符串,然后自动忽略空格呢?
下面我们来看看用C++语言来实现单词输入:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int main() 6 { 7 string b; 8 int i,j=1,k,a; 9 getline(cin,b); 10 k=b.size(); 11 for(i=0;i<k;i++) 12 { 13 a=b[i]-' '; 14 if(a==0) 15 { 16 j++; 17 } 18 } 19 cout<<j<<endl; 20 system("pause"); 21 return 0; 22 }
蓝桥杯练习系统通过。
getline(cin,b);
这里是以它来实现的。
接下来就以Java语言来实现单词个数统计:
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 Scanner sc = new Scanner(System.in); 7 // int n =sc.nextInt(); 8 String b =sc.nextLine(); 9 int k = b.length(); 10 int i,s=1; 11 12 for(i=0;i<k;i++) 13 { 14 String str=b.substring(i,i+1); 15 if(str.equals(" ")) 16 { 17 s++; 18 } 19 } 20 21 System.out.println(s); 22 23 } 24 25 }
蓝桥杯练习系统通过,100分。
因为我刚开始学习java,还不算太熟悉,所用到的一些一些方法完全是以C++的思维,但是在写这道题的时候,我在这几个小点上犯了错:
1,
String b =sc.nextLine();
这个语句是输入字符串的,它包含输入空格,它的分隔符就是回车,所以在考虑单词空格时,不需要担心后来的不算入进去;
2,在截取字符串获得单个的时候,容易将字符串与字符进行比较,这显然是错误的。
同种题型,在PAT上也有,链接:https://www.patest.cn/contests/pat-b-practise/1009
这个题则是以反过来输入为主,方法很多,下面就把这个题以及最后我的检测结果给放出来:
就是这个题目,它的大致思路和蓝桥杯上的差不多。详见代码:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int main() 6 { 7 string b; 8 getline(cin,b); 9 int i,j,k=0,p,q; 10 k=b.size(); 11 i=k-1; //字符串最大脚标 12 13 for(;i>=0;) 14 { 15 p=i; 16 for(;p>=0;p--) 17 { 18 if(b[p] == ' ') 19 { 20 for(j=p+1;j<=i;j++) //除第一个单词以外的单词输出,注意脚标 21 { 22 cout<<b[j]; 23 } 24 cout<<" "; 25 break; 26 } 27 if(p==0) 28 { 29 for(j=0;j<=i;j++) //输出最后的一个字符,即输入的第一个字符 30 { 31 cout<<b[j]; 32 } 33 } 34 } 35 i=p-1; //减去空格 36 } 37 return 0; 38 }
结果测试显示:
测试点全部通过,蛮开心的!
小结:
输入输出要注意它的格式,以及空格的存在,整体思路不难,主要存在的问题就是那一个小点。