校招編程練習題2 寫出一個程序,接受一個有字母和數字以及空格組成的字符串,和一個字符,然後輸出輸入字符串中含有該字符的個數。不區分大小寫。

來源:華爲機試題2

描述

寫出一個程序,接受一個有字母和數字以及空格組成的字符串,和一個字符,然後輸出輸入字符串中含有該字符的個數。不區分大小寫。

知識點字符串,循環,大小寫字母
運行時間限制0M
內存限制0
輸入

輸入一個有字母和數字以及空格組成的字符串,和一個字符。

輸出

輸出輸入字符串中含有該字符的個數。

樣例輸入ABCDEF A
樣例輸出

1

C實現

#include <stdio.h>
#include <string.h>
  
int main()
{
   char str[10000];
   char ch;
   int len = 0;
   gets(str);            //以enter即'\n'爲字符串的結束符
   ch = getchar();       //getchar函數也是可行的
   //scanf("%c",&ch);    //使用scanf()函數輸入字符也是可行的,
   for(int i = 0; i < strlen(str); i++)
   {
            if(str[i] == ch || str[i] == ch -32 || str[i] == ch + 32)
                len++;
   }
   printf("%d\n",len);

   return 0;
}

C++實現

#include<iostream>  
#include<cstring>  
using namespace std;  
  
// 將小寫字母轉換爲大寫字母
void change(char *str)  
{  
    int i;  
    for(i=0; str[i]!='\0'; i++)  
    {  
        if(str[i]>='a'&&str[i]<='z')  
            str[i]=str[i]-32;  
    }  
}  
  
int main()  
{  
    char str[512],ch;  
    int i,count=0,length=0;  
    cin.getline(str,512);  
    cin.get(ch);  
    length=strlen(str);  
    change(str);  
    //要求統計的字符是字母,注意大小寫  
    if((ch>='a'&&ch<='z')  || (ch>='A'||ch<='Z'))  
    {  
        //待統計的字符爲小寫,轉換成大寫,後面可與字符串中的統一比較不再區分大小寫  
        if(ch>='a'&&ch<='z')  
            ch=ch-32;  
        for(i=0; i<length; i++)  
        {  
            if(str[i]==ch)  
                count++;  
        }  
    }  
    //其他字符直接判斷即可  
    else  
    {  
        for(i=0; i<length; i++)  
            if(str[i]==ch)  
                count++;  
    }  
    cout<<count<<endl;  
    return 0;  
}  

補充知識:

(1)cin.getline()cin.getline()與 cin.get(array_name,Arsize)的讀取方式差不多,以Enter結束,可以接受空格字符。按照長度(Arsize)讀取字符, 會丟棄最後的Enter字符。但是這兩個函數是有區別的:cin.get(array_name, Arsize)當輸入的字符串超長時,不會引起cin函數的錯誤,後面的cin操作會繼續執行,只是直接從緩衝區中取數據。但是cin.getline()當輸入超長時,會引起cin函數的錯誤,後面的cin操作將不再執行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章