本題要求編寫程序,輸入10個字符,統計其中英文字母、空格或回車、數字字符和其他字符的個數。
輸入格式:
輸入為10個字符。最后一個回車表示輸入結束,不算在內。
輸出格式:
在一行內按照
letter = 英文字母個數, blank = 空格或回車個數, digit = 數字字符個數, other = 其他字符個數
的格式輸出。
輸入樣例:
aZ &
09 Az
輸出樣例:
letter = 4, blank = 3, digit = 2, other = 1
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
我的答案:
錯誤答案:
#include<stdio.h>
int main(){char c;//我原本這里定義了字符數組char a[10] int letter=0,blank=0,digit=0,other=0;//寫程序的時候忘寫了 for(int i=0;i<10;i++){//這里我用了scanf("%d",&a[i]);}if(){//這里的條件都忘了而且用的是if嵌套語句 if(){if(){if(){} }}}
}
首先,為了解決這個問題,我們需要對輸入的每個字符進行分類。具體來說,我們可以使用以下的策略:
- 使用
isalpha()
來檢查字符是否是字母。 - 使用
isspace()
來檢查字符是否是空格或換行。 - 使用
isdigit()
來檢查字符是否是數字。 - 如果字符不滿足上述任何一種情況,那么它就是其他字符。
以下是按照上述策略用 C 和 C++ 實現的代碼:
C語言:
#include <stdio.h>
#include <ctype.h>int main() {char c;int letter = 0, blank = 0, digit = 0, other = 0;for (int i = 0; i < 10; i++) {c = getchar();if (isalpha(c)) {letter++;} else if (isspace(c)) {blank++;} else if (isdigit(c)) {digit++;} else {other++;}}printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other);return 0;
}
C++:
#include <iostream>
#include <cctype>
using namespace std;int main() {char c;int letter = 0, blank = 0, digit = 0, other = 0;for (int i = 0; i < 10; i++) {cin.get(c);if (isalpha(c)) {letter++;} else if (isspace(c)) {blank++;} else if (isdigit(c)) {digit++;} else {other++;}}cout << "letter = " << letter << ", blank = " << blank << ", digit = " << digit << ", other = " << other << endl;return 0;
}
這兩個程序都能讀取10個字符,并統計每種字符類型的數量,然后輸出結果。
總結:
反思:
這道題目我暴露了幾個問題
1.是ASCII碼的范圍和使用方式完全忘記
2.如何使用getchar,這道題目我剛開始是想要用字符數組的。
學到了:
1.新的函數幫我檢測輸入字符
- 使用
isalpha()
來檢查字符是否是字母。 - 使用
isspace()
來檢查字符是否是空格或換行。 - 使用
isdigit()
來檢查字符是否是數字
這樣做的好處:
-
ASCII碼: 對于很多程序員來說,完整記住ASCII碼表是不太現實的。然而,你應該至少熟悉常見的ASCII字符的范圍。例如,數字
0-9
是48-57
,大寫字母A-Z
是65-90
,小寫字母a-z
是97-122
。不過,在實際編程中,使用標準庫提供的函數(如isalpha()
,isdigit()
等)更為便捷、安全,且易于閱讀。 -
getchar的使用:
getchar()
函數是一個很基礎的從標準輸入讀取單個字符的函數。在處理字符流或需要逐字符處理的情境中,它是非常有用的。當你認為需要使用字符數組或字符串來處理輸入時,考慮使用getchar()
可能會使問題簡化。
學到的新知識:
isalpha()
,isspace()
,isdigit()
: 這些函數屬于C/C++的標準庫,用于字符分類。它們提供了方便的方式來檢查字符的類型,而不是手動檢查ASCII值。這不僅使代碼更具可讀性,還有助于減少錯誤。