1. 程式人生 > >[程式設計題]字元個數統計

[程式設計題]字元個數統計

Talk is cheap, show me the code.

一、問題描述

編寫一個函式,計算字串中含有的不同字元的個數。字元在ACSII碼範圍內(0~127)。不在範圍內的不作統計。

輸入描述:

輸入N個字元,字元在ACSII碼範圍內。

輸出描述:

輸出範圍在(0~127)字元的個數。

輸入例子:

abc

輸出例子:

3

二、問題分析

可以直接採用set儲存輸入的字元,然後輸出set.size()即可。也可以設定128為bool陣列,記錄輸入的字元個數。還可以把所有輸入字元當做一個字串讀入,然後找字串中0-127的字元是否存在並計數。

解題方式1:

採用128為bool陣列記錄讀入字元,並遍歷陣列統計計數。

#include <iostream>
using namespace std;

int main()
{
    bool ch[128] = {false};
    char c;
    while (cin >> c)
    {
        ch[c] = true;
    }
    int count = 0;
    for (int i = 0; i < 128; i++)
    {
        if (ch[i])
            count++;
    }
    cout << count << endl;
    return 0;
}

解題方式2:

採用set儲存輸入的字元,輸出set的大小即可。

#include <iostream>
#include <set>
#include <iterator>
using namespace std;

int main()
{
    set<char> st;
    char c;
    while (cin >> c)
    {
        st.insert(c);
    }
    cout << st.size() << endl;
    return 0;
}

解題方式3:

直接把所有字元讀入為字串,然後統計0-127中的字元個數。其實在不知道空格、換行、製表符對應ASCII碼是否在0-127之間時最好不要採用這種方法,用這種方法也行,不過就不能是讀入一個單詞的string,而是把整行讀入作為一個字串。

#include <iostream>
#include <string>
using namespace std;

int main()
    {
    string b;
    getline(cin,b);
    int count=0;
    for(int i=0;i<=127;i++)
        if(b.find(i)!=string::npos)
        count++;
    cout<<count;
    return 0;
}