天天看點

c++或c統計不同類型字元個數

題目要求:

編寫程式,輸入一個長度不超過40的字元串s,統計其中大寫字母、小寫字母、數字字元、空格及其其他字元的個數。

例如:輸入:Ab c2:3dA A709 bM.c454>AA#[email protected],A

          輸出:8 5 11 3 6,

有好幾個版本,如需要輸入字元數的,不需要輸入字元數的

c++是這樣的,c++和c版本主要是輸入輸出的差別:

#include <iostream>
//#include<stdio.h>
//#include<string.h>
using namespace std;

int main(){
    int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大寫字母,小寫字母,數字,空格,其它字元個數,初值為0。

    int n=44; //字元數組最大的大小。


    char* arr=new char[n+1]; //定義字元數組arr,包含n個字元,最後一位為空字元。

    cout<<"輸入字元串";
    cin.get(arr,n);
    int sum;
    cout<<"輸入實際字元個數";
    cin>>sum; 

    for(int i=0;i<sum;i++){
        if ('Z'>=arr[i]&&(arr[i]>='A'))

            dx++;

        else if (('z'>=arr[i])&&(arr[i]>='a'))

            xx++;

        else if (('9'>=arr[i])&&(arr[i]>='0')) 

            sz++;

        else if(arr[i]==' ')

            kg++;
        else qt++;

    }
    cout<<dx<<' '<<xx<<' '<<sz<<' '<<kg<<' '<<qt;
return 0;


}
           

對于是否需要輸入字元串長度(就是字元個數),可以采用strlen函數自動統計字元長度。用于循環是的限制,或者在for哪裡for(i=0;arr[i]!='\0';i++)當arr為空是結束循環也行。

算法那一塊的話沒什麼好說的,不過在輸入哪裡需要注意的是cin.get(arr,n)輸入時可以包括空格,單單是cin遇到空格會停止的,

是以改進一下就是:這裡是當arr[i]='\0'時停止循環,采用cin.get()函數輸入

#include <iostream>
using namespace std;

int main(){
    int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大寫字母,小寫字母,數字,空格,其它字元個數,初值為0。

    int n=44; //字元數組最大的大小。


    char* arr=new char[n+1]; //定義字元數組arr,包含n個字元,最後一位為空字元。

    cout<<"輸入字元串";
    cin.get(arr,n);

    for(int i=0;arr[i]!='\0';i++){

        if ('Z'>=arr[i]&&(arr[i]>='A'))

            dx++;

        else if (('z'>=arr[i])&&(arr[i]>='a'))

            xx++;

        else if (('9'>=arr[i])&&(arr[i]>='0')) 

            sz++;

        else if(arr[i]==' ')

            kg++;
        else qt++;

    }
    cout<<dx<<' '<<xx<<' '<<sz<<' '<<kg<<' '<<qt;
return 0;


}
           

c語言可以這樣這裡采用strlen統計字元串長度來結束循環,采用gets()輸入字元串,

#include<stdio.h>
#include<string.h>

int main(){
    int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大寫字母,小寫字母,數字,空格,其它字元個數,初值為0。

    int n=40; //字元數組最大的大小。

    char* arr=new char[n+1]; //定義字元數組arr,包含n個字元,最後一位為空字元。
    gets(arr);
    
    n = strlen(arr);//統計字元串大小
    
    for(int i=0;i<n;i++){
        if ('Z'>=arr[i]&&(arr[i]>='A'))//是否為大寫

            dx++;

        else if (('z'>=arr[i])&&(arr[i]>='a'))//是否為小寫

            xx++;

        else if (('9'>=arr[i])&&(arr[i]>='0')) //是否為數字
            sz++;

        else if(arr[i]==' ')//是否為空格

            kg++;
        else qt++;//其他字元

    }
    printf("%d  %d  %d  %d  %d",dx,xx,sz,kg,qt);
return 0;


}
           

總體難度可能就是輸入那裡和循環的問題,思路就是輸入一個字元串,然後從字元串第一個字元開始判斷字元類型,對應類型數加1,

繼續閱讀