#41304: c++參考解答


spark960513@gmail.com (Sparkkk_)

學校 : 臺北市立成功高級中學
編號 : 204599
來源 : [180.217.7.6]
最後登入時間 :
2024-11-01 07:42:50
a011. 00494 - Kindergarten Counting Game -- UVa494 | From: [124.218.194.42] | 發表日期 : 2024-07-16 19:36

用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;
 
#41305: Re: c++參考解答


spark960513@gmail.com (Sparkkk_)

學校 : 臺北市立成功高級中學
編號 : 204599
來源 : [180.217.7.6]
最後登入時間 :
2024-11-01 07:42:50
a011. 00494 - Kindergarten Counting Game -- UVa494 | From: [124.218.194.42] | 發表日期 : 2024-07-16 20:42

ㄟ...就是說,我好像打錯了: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;
}

 
ZeroJudge Forum