/* 題目描述 輸入一行字符,分別統計出其中英文字母、數字、空格和其他字符的個數。 輸入 一行字符 */ #include<iostream> using namespace std; int main() { int c; int clen=0,nlen=0,llen=0,elen=0; while((c=getchar())!='\n')//while里的表達式(c = getchar()) != '\n',意思是,當輸入的字符不是換行符的時候,繼續往下執行 { //while((c=getchar())!='\n')注意這里的括號不能丟,因為!=的優先級比=高,如果去掉了外面的括號就等價於 c = (getchar()!='\n') if((int('A')<=c&&int('Z')>=c)||(int('a')<=c&&int('z')>=c)) { llen++; continue; } if(int('0')<=c&&int('9'>=c)) { nlen++; continue; } if(int(' ')==c) { elen++; continue; } clen++; } cout<<llen<<' '<<nlen<<' '<<elen<<' '<<clen; return 0; }
在這里我們會用到getchar()函數,簡單來說,getchar()就是從鍵盤獲取字符,直到回車為止;
代碼中while里的表達式(c = getchar()) != '\n',意思是,當輸入的字符不是換行符的時候,繼續往下執行;
注意這里的括號不能丟,因為!=的優先級比=高,如果去掉了外面的括號就等價於 c = (getchar()!='\n');
#include<stdio.h> int main() { int letter = 0,number = 0,blank = 0,others = 0,c; //分別為字母、數字、空格、其他 while((c = getchar()) != '\n'){ if(c >= 'A' && c<='Z' || c >= 'a' && c <= 'z') //判斷是否為字母 letter++; else if(c >= '0' && c <= '9') //判斷是都為數字 number++; else if(c == ' ') //判斷是否為空格 blank++; else //其他 others++; } printf("%d %d %d %d\n",letter,number,blank,others); return 0; }
原題鏈接:
[編程入門]字符串分類統計
解題思路:C標准中有一個一個頭文件<ctype.h>,這里面定義了一批C語言字符處理函數,用於測試字符是否屬於特定的字符類別,如字母字符、控制字符、數字、等等;
頭文件:<ctype.h>
函數:
(1)int isalpha(int ch);
判斷ch是否為字母,如果是返回非0,反之返回0;
(2)int isdigit(int ch);
判斷ch是否為數字,如果是返回非0,反之返回0;
(3)int islower(int ch);
判斷ch是否為小寫字母,如果是返回非0,反之返回0;
(4)int isupper(int ch);
判斷ch是否為大寫字母,如果是返回非0,反之返回0;
……
等等很多處理字符的函數,大家有興趣可以去看看博客。
#include <stdio.h> #include <ctype.h> int main() { int letter = 0,number = 0,blank = 0,others = 0,c; //分別為字母、數字、空格、其他 while((c = getchar()) != '\n'){ if(isalpha(c)) //判斷是否為字母 letter++; else if(isdigit(c)) //判斷是都為數字 number++; else if(c == ' ') //判斷是否為空格 blank++; else //其他 others++; } printf("%d %d %d %d\n",letter,number,blank,others); return 0; }