2015-09-29 134 views
0

我遇到了一個基本的C++程序分配問題,並且非常感謝您的幫助。分配如下:C++ While循環,使用if else語句在數組中計數

編寫一個程序,接受來自鍵盤的輸入(輸入 按Enter鍵終止)並計算字母數(AZ和az),數字數字(0-9)和其他角色。使用cin輸入字符串並使用以下循環結構來檢查字符串中的每個字符,並使用「if」語句和多個「else if」語句。

我的計劃迄今爲止是:

#include <iostream> 
using namespace std; 

int main() 
{ 
char s[50]; 
int i; 
int numLet, numChars, otherChars = 0; 

cout << "Enter a continuous string of  characters" << endl; 
cout << "(example: [email protected]#$%)" <<  endl; 
cout << "Enter your string: "; 
cin >> s; 

i = 0; 
while (s[i] != 0) // while the character does not have ASCII code zero 
{ 
if ((s[i] >= 'a' && s[i] <= 'z') || s[i] >= 'A' && (s[i] <= 'Z')) 
    {numLet++; 
    } 
else if (s[i] >= 48 && s[i] <= 57) 
{numChars++; 
    } 
else if ((s[i] >= 33 && s[i] <= 4) || (s[i] >= 58 && s[i] <=64) || (s[i] >= 9 && s[i] <= 96) || (s[i] >= 123 && s[i] <= 255)) 
    {otherChars++; 
    } 
    i++; 
} 

cout << numLet << " letters" << endl; 
cout << numChars << " numerical characters" << endl; 
cout << otherChars << " other characters" << endl; 

return 0; 
} 

信計給出一個值有點太低了,數數給出大的負數。其他字符似乎功能正常。

+0

對於數字字符,你可以使用'0'和'9';注意區分文本表示和數字(內部)表示的單引號。 –

+0

檢查你的邏輯。你需要爲其他*字符使用if語句,還是需要使用最後的else語句? –

+0

另外,使用'std :: string'和'std :: getline'。如果有人輸入超過50個字符,程序將開始寫入字符數組以外,導致*未定義行爲*。否則,使用'std :: getline'並指定最大字符數(記住爲終止'\ 0'字符保留空間)。 –

回答

0

您需要將每個整數設置爲0.原樣,您的代碼只設置otherChars = 0。製作該行numLet = 0, numChars = 0, otherChars = 0;。在其他答覆中提到

+0

感謝大家的幫助,它現在按預期工作。 –

1

正如,你需要初始化變量,但你也有一個錯誤在此代碼:

if ((s[i] >= 'a' && s[i] <= 'z') || s[i] >= 'A' && (s[i] <= 'Z')) 

括號內是錯誤的。而作爲一個結果,你是不計算小寫字母(我想)反正它建議立即進行刪除是這個(縮進能見度):

if (
     (s[i] >= 'a' && s[i] <= 'z') || 
     (s[i] >= 'A' && s[i] <= 'Z') 
    ) 

你也可以使用this。因爲你使用的是C++而不是c,所以右圖)(這裏的人顯然對這個區別很生氣)