[程式設計題]字元個數統計
阿新 • • 發佈:2019-02-12
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;
}