zoukankan      html  css  js  c++  java
  • 【NOIP2018 普及组 】标题统计

    
    

    本人水平有限,题解不到为处,请多多谅解

    本蒟蒻谢谢大家观看


    题目
    传送门


    以下是本人想到的三种方法:



    法一:用gets读入,因为gets可以读入任何字符且包括空格,直到 ‘ ’ 换行停止。注意:判断空格时用 ‘ ’,       注 : gets读入的必须是char数组 code:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int p,len=0,i,ans;
     4 char a[1212];
     5 int main()
     6 {
     7 gets(a);
     8 len=strlen(a);
     9 for(int i=0;i<len;i++)
    10 if(a[i]==' ')
    11 ans++;
    12 //cout<<ans<<endl;
    13 cout<<len-ans<<endl;
    14 }
    
    
    
    
    
    法二:用getchar读入,getchar也可以读入任何字符且包括空格,其余同上,但是getchar为字符中最高效的,gets易导致堆栈溢出 , getchar读入时要手动在末尾加入
    
     空格 ‘0’ ,其余读入法均自带。
    
    gerchar读入时若不开char数组,则只读入第一位
    
    code:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int p,len=0,i;
     4 char a[1212];
     5 int main()
     6 {
     7 i=0;
     8 while((a[i]=getchar())!='
    ')
     9 {
    10 i++;    
    11 } 
    12 a[i]='';
    13 i=0; 
    14 while(a[i]!='')
    15 {    
    16 // putchar(a[i]);
    17 
    18 i++;    
    19 if(a[i]==' ')
    20 len++;
    21 }
    22 if(a[0]==' ')  //必须要特判第一位的空格,因为我在while中 i++ 在 if(a[i]==' ') 前面
    23 len++;
    24 //putchar('
    ');
    25 cout<<i-len<<endl;
    26 //cout<<len<<endl;
    27 }
    
    

     法三:用string读入

    其中getline类似于gets 可以读进空格

    但string与char最大的不同在于:使用char要先在自变量定义数组,string不需要。使用时,char可以手动+1,使其下标从1开始,但string不行

    code:

     1 #include<bits/stdc++.h>
     2 using namespace std; 
     3 int ans,ans2;
     4 string ch;
     5 int main()
     6 {
     7     getline(cin,ch);
     8     int len=ch.size();
     9     //cout<<"len= "<<len<<endl;
    10     for(int i=0;i<len;i++){
    11         if(ch[i]==' ')ans++;
    12     }
    13     //if(ch[len+1]==' ')len--;
    14     cout<<len-ans<<endl;
    15     return 0;
    16 }

     本人在交题时发现一个error:

    1 for(int i=0;i<len;i++){
    2         if(ch[i]==' ')len--;
    3     }

    上述做法会有些错误hank数据如下
      1  2  (2后有2个空格)

    标准输出:2

    WA输出:3

    至于为什么:到目前为止,我自己还没有完全想清楚,可能是因为len之后的空格在ch中没有体现,导致只记录了总数,后面的空格数没有完全统计到。

    若哪位神犇有科学解释,请在此篇博客下放发表评论,本人不胜感激。

    以下是正解:

    1 for(int i=0;i<len;i++){
    2         if(ch[i]==' ')ans++;
    3     }
    
    
  • 相关阅读:
    第二阶段冲刺第五天(6月4号)
    第二阶段冲刺第四天(6月3号)
    第二次阶段冲刺第三天(6月2号)
    第二次阶段冲刺第二天(6月1号)
    第二次阶段冲刺第一天(5月31号)
    第十周学习进度
    第十一周学习进度
    第十二周学习进度
    javascript 将递归转化为循环
    创建数据库,并设置外部访问权限
  • 原文地址:https://www.cnblogs.com/nlyzl/p/11264623.html
Copyright © 2011-2022 走看看