[英]Program crashing in C++
我剛剛開始學習C ++,這是我正在為練習編寫的一個程序:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int uppercase=0, lowercase=0, digits=0, other=0, i=0;
int character;
char* string;
cout << "Enter a string!\n";
cin.getline(string, 20);
while(true)
{
character = int(*(string+i));
if (character==0)
{
break;
}
if (character > 64 && character < 91)
{
uppercase++;
}
if (character > 96 && character < 122)
{
lowercase++;
}
if (character > 47 && character <58)
{
digits++;
}
else
{
other++;
}
i++;
}
cout << "Upper case " << uppercase << "\n";
cout << "Lower case " << lowercase << "\n";
cout << "Digits " << digits << "\n";
cout << "Others " << other << "\n";
return 0;
}
程序完成打印結果后程序崩潰。 我錯過了一些非常明顯的東西嗎?
副問題:變量'other'總是增加,即使它不應該。 我使用else語句錯了嗎?
您還沒有為string
分配內存
試試這個(在堆棧上分配):
char string[256];
或(在堆上分配):
char* string = new char[256];
delete[] string;
UPDATE
使用std
和預定義的isdigit()
, isalpha()
等,可以按如下方式重寫代碼:
#include <iostream>
#include <string>
int main ()
{
int uppercase=0, lowercase=0, digits=0, other=0;
std::cout << "Enter a string!\n";
std::string myline;
std::getline(std::cin, myline);
for (std::string::iterator i = myline.begin(); i != myline.end(); ++i)
{
if (isdigit(*i))
{
digits++;
}
else if (isalpha(*i))
{
isupper(*i) ? uppercase++
: lowercase++;
}
else
{
other++;
}
}
std::cout << "Upper case " << uppercase << "\n";
std::cout << "Lower case " << lowercase << "\n";
std::cout << "Digits " << digits << "\n";
std::cout << "Others " << other << "\n";
return 0;
}
如果前面的if
語句為false,則執行else
語句。 在您的情況下,當(character > 47 && character <58)
為假時,其他值會增加。 你可能想要使用else-if
代替:
if(){
...
}else if{
...
}else if{
...
}else{
...
}
嘗試char string[256]
而不是char* string;
。 我猜getline
需要一個指向已分配內存的指針作為輸入。
您還沒有為string
分配內存,使用該名稱可能不是一個好主意:
char* string ;
因為你using namespace std
,所以可以工作而不是影子std::string
替代聲明:
char str[21] ;
在你的代碼中,如果你想使用std::string
你必須這樣做:
std::string someStringVar ;
因為在聲明char *string
后使用它將不起作用:
string someStringVar ;
這似乎打敗了using namespace std
的目的。
您應該使用char
而不是int
來表示字符。 這是因為int
通常是4個字節而char
只有1個字節(因此足以表示一個字符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.