我是一名初級程式員,我發現有一個練習是這樣說的。
寫出一串字符,并確定字數、數字、大小寫字符和空格的數目。我認為我構建的是一個足夠體面的程式并且它可以作業,有點!問題是當我嘗試運行它時,結果并不完全正確。例如; 當我寫:HI MY name is Ani 1 1 2 a
它說
空格 = 8 正確
Numbers=3 在這里也正確
大寫字符=4 應該是5
小寫字符 = 7 應該是 9
Words = 26 這是完全錯誤的
至于單詞,我找到了一種新的計算方法。通過計數,spaces 1但我想正確地計算它們
是否可以指出錯誤?
這是我到目前為止所做的
int main() {
char str[1000 1];
int words = 0;
int numbers = 0;
int uppercharacters = 0;
int lowercharacters = 0;
int spaces = 0;
int i;
printf("Please enter the string of characters: ");
gets(str);
for (i = 0; str[i] != '\0'; i ) {
if (str[i] > 'a' && str[i] < 'z')
lowercharacters ;
else if (str[i] > 'A' && str[i] < 'Z')
uppercharacters ;
else if (str[i] == ' ')
spaces ;
else if (str[i] > '0' && str[i] < '9')
numbers ;
else if (str[i] == ' ' && str[i 1] != ' ');
words ;
}
printf("Spaces = %d\n", spaces);
printf("numbers = %d\n", numbers);
printf("Upper Case characters = %d\n", uppercharacters);
printf("Lower Case characters = %d\n", lowercharacters);
printf("Words = %d\n", words 1);
return 0;
}
uj5u.com熱心網友回復:
至于單詞,我找到了一種計算它們的新方法。通過計算空格 1,但我想正確計算它們
代碼失敗,因為;在else if().
提示啟用所有警告的優秀編譯器會對此發出警告。
節省時間,啟用所有警告。
// v !!!
else if(str[i]==' ' && str[i 1]!=' ');
words ;
即使修正為
else if(str[i]==' ' && str[i 1]!=' ')
words ;
仍然失敗,輸入" abc"(前導空格)報告為 2 個詞
而是計算非字母后面的字母出現的次數。
char previous = '\n';
for(i=0; str[i] != '\0'; i ) {
if (isalpha(str[i]) && !isalpha(previous)) {
words ;
}
previous = str[i];
}
如果is...()不允許使用標準的輔助函式,請讓您擁有自己的輔助函式。
uj5u.com熱心網友回復:
你應該使用if(str[i]>='a' && str[i]<='z')而不是if(str[i]>'a' && str[i]<'z'). 您不想從測驗中排除字符 z 和 a。
uj5u.com熱心網友回復:
對于計數單詞部分,請注意在您的最后一條else if陳述句之后有一個錯位的分號。如果您修復了該錯字,單詞數將不會 100% 正確,但您可能可以從那里開始作業:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331921.html
標籤:C
上一篇:為什么我的switchcase總是進入defaultcase?
下一篇:資料型別范圍的真正含義是什么?
