用c++的話,可以先include <string>,就可以用裡面的getline()函式,方法跟用while(cin>>text)一樣。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
int count = 0;
while(getline(cin, input))
{
count = 0;
for(char c : input )
{
// cout<<(64 < c < 91);
if(c == ' ') count++;
}
cout<<count;
ㄟ...就是說,我好像打錯了:D 剛剛去解答的時候發現過不了,但經過我一番嘔心瀝血的操作,我剛剛改好了~
我的方法是利用ascii碼來轉換,當遇到標點符號的時候就停止,但為了防止連續出現標點符號(e.g. Hello!!)而導致重複計算,我們需要另外設一個bool變數來控制。也就是說,當遇到標點符號,且前一個字是英文字母的時候,才需要做計算,這部分要注意程式碼順序。最後,請留意輸入的字串末端是否為標點符號,如果是以英文字母結尾的話需要手動多算。
#include <iostream>
#include <string>
using namespace std;
bool isChar(char c){
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
}
int main()
{
bool isABC = true;
string input;
int count = 0;
while(getline(cin, input))
{
count = 0;
for(char c : input )
{
if(!isChar(c) && isABC)
{
count++;
isABC = false;
}
if(isChar(c)) isABC = true;
else isABC = false;
}
if(!isChar((char)input.back())) count--;
cout<<count + 1<<endl;
}
return 0;
}