用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; }