天天看點

12-字元個數統計

1- Description

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

輸入描述:

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

輸出描述:

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

示例1:

輸入:

abc

輸出:

3

2- Solution

  • 注意

    resultvec.erase(resultvec.begin() + j);

    的使用
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    string strin;
    while(cin >> strin){
        int count = 0;
        vector<int> resultvec;
        for(int i = 0; i < strin.length(); ++i){
            if(strin[i] >= 0 && strin[i] <= 127){
                resultvec.push_back(strin[i]);
            }
        }
        sort(resultvec.begin(),resultvec.end());
        int countnum = 0;
        for(int i = 0; i < resultvec.size(); ++i){//取出重複元素
            for(int j = i + 1; j < resultvec.size(); ++j){
                if(resultvec[i] == resultvec[j]){
                    resultvec.erase(resultvec.begin() + j);//這裡不能寫成resultvec.erase( j);==》必須是疊代的輸入
                    --j;
                }
            }
        }
        cout << resultvec.size()<<endl;
    }
    return 0;
}
           
  • 對自動排序且去重的情況可以考慮用set,ascii值在[0,127]時插入集合set中,輸出set中的元素個數
#include<iostream>
#include<set>
using namespace std;
int main()
{
    char c;
    set<char> s;
    while(cin>>c){
        if(c>=0 && c<=127){
            s.insert(c);
        }
    }
    cout << s.size() <<endl;
}
           
  • 下面這種方法和提取不重複數字方法上是類似的!
#include<iostream>
using namespace std;
int main(){
    char ch;
    int arr[128]={0};
    int count=0;
    while(cin>>ch){
        if(ch>=0 && ch<=127){
            arr[ch]++;
        }
    }
    for(int i=0;i<128;i++){
        if(arr[i]>0)
            count++;
    }
    cout<<count<<endl;
    return 0;
}
           

歡迎關注公衆号:CodeLab

繼續閱讀