NOIP-----2018-----普及組-----標題統計


題目描述
凱凱剛寫了一篇美妙的作文,請問這篇作文的標題中有多少個字符?注意:標題中可能包含大、小寫英文字母、數字字符、空格和換行符。統計標題字符數時,空格和換行符不計算在內。
輸入格式:
輸入只有一行,一個字符串 s。
輸出格式:
輸出只有一行,包含一個整數,即作文標題的字符數(不含空格和換行符)。
輸入輸出樣例:
輸入樣例#1:
234
輸出樣例#1:
3
輸入樣例#2:
Ca 45
輸出樣例#2:
4
說明:
【輸入輸出樣例 1 說明】
標題中共有 3 個字符,這 3 個字符都是數字字符。
【輸入輸出樣例 2 說明】

標題中共有4個字符,包括1個大寫英文字母,1個小寫英文字母和2個數字字符,還有1個空格。由於空格不計入結果中,故標題的有效字符數為4個。

【數據規模與約定】
規定∣s∣表示字符串 s 的長度(即字符串中的字符和空格數)。
對於 40% 的數據,1≤∣s∣≤5,保證輸入為數字字符及行末換行符。
對於 80% 的數據,1≤∣s∣≤5,輸入只可能包含大、小寫英文字母、數字字符及行末換行符。
對於 100% 的數據,1≤∣s∣≤5,輸入可能包含大、小寫英文字母、數字字符、空格和行末換行符。

 

第一次做的時候,時間超限(95分)……

下面是代碼:

 

(時間超限95)C++代碼

 

#include <bits/stdc++.h>
using namespace std;
int main()
{
char a;
int ans=0;
while(cin.peek()!='\n') //掃一下新輸入的字符是不是換行字符
{
cin>>a;
if(a!=' ')ans++;
}
cout<<ans<<endl;
return 0;
}

 

所以接着嘗試……

同學告訴我,簡單一點做,所以:

 

(答案錯誤90)C++代碼

#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[6];
int ans=0,len;
gets(a);
len=strlen(a);
for(int i=1;i<=len;i++)
if(a[i]!=' ')ans++;
cout<<ans<<endl;
return 0;
}

 

內心絕望!!!

后來**的我終於發現了自己的錯誤

下面是正確的代碼

 

(AC)C++代碼

#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[6];
int ans=0,len;
gets(a);//從a[0]開始寫入,所以循環從i=0開始
len=strlen(a);
for(int i=0;i<len;i++)
if(a[i]!=' ')ans++;
cout<<ans<<endl;
return 0;
}

 

gets()

gets從標准輸入設備讀字符串函數,其可以無限讀取,不會判斷上限,以回車結束讀取,所以程序員應該確保buffer(緩沖寄存器)的空間足夠大,以便在執行讀操作時不發生溢出。——源自360百科&百度百科

頭文件:#include<stdio.h>(C)&#include<cstido>(C++)(包含在#include<bits/stdc++.h>中)

gets()和scanf("%s",s)

scanf("%s",s) 輸入字符串時,如果輸入了空格會認為字符串結束,空格后的字符將作為下一個輸入項處理

gets()函數將接收輸入的整個字符串直到遇到換行為止

(ps.gets()函數讀取到‘\n’於是停止讀取,但是它不會把\n包含到字符串里面去。然而,和它配合使用的puts()函數,卻在輸出字符串的時候自動換行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM