[英]Typecasting, ints and chars in c++
我正在嘗試編寫一個函數來檢測分配所定義的分隔符,並且我知道這不是一種好的編程風格
#define EXCLAMATION_POINT 33, but to instead do #define EXCLAMATION_POINT '!'
這是我的代碼:
#include <iostream>
#include <ostream>
using namespace std;
#define PERIOD '.'
#define QUESTION_MARK '?'
#define EXCLAMATION_POINT '!'
#define COMMA ','
#define COLON ':'
#define SEMICOLON ';'
inline bool IsSeparator(int x)
{
if (isspace(x) ||
x == PERIOD ||
x == QUESTION_MARK ||
x == EXCLAMATION_POINT ||
x == COMMA ||
x == COLON ||
x == SEMICOLON) {
return true;
}
else {
return false;
}
}
int main (int argc, char * const argv[]) {
int input;
cout << "Enter characters: \n";
input = cin.get();
if (!IsSeparator(input))
cout << "true";
else {
cout << "false";
}
return 0;
}
但是,在我的IsSeparator()中,如何將int轉換為char類型以與“!”進行比較。 我以為如果我做了類似(char)EXCLAMATION_POINT的工作,那是行得通的,但沒有成功,值留在了int處。 我在這里做錯了什么? 謝謝!
您不需要任何演員表,但是:
if (!IsSeparator(input))
應該:
if (IsSeparator(input))
另外,您的提示:
cout << "Enter characters: \n";
表示您可以輸入多個字符。 因此可以,但是cin.get()僅讀取一個。
關於給事物賦予符號名稱。 假設您正在分析一個分隔符為冒號的文件。 然后,可以說:
const char SEPARATOR = ':';
因為您可以在文件格式更改時進行更改,例如:
const char SEPARATOR = '|';
但是給ASCII(或任何其他)字符集的成員自己命名通常是沒有意義的。
在您的代碼中,創建一個分隔符數組可能很有意義(我沒有顯示您為了方便鍵入而使用的所有分隔符):
const char SEPARATORS[] = {':', '|', '!', 0 };
然后讓您的驗證功能遍歷數組。 請注意,在這種情況下,數組也可以表示為字符串文字:
const char * const SEPARATORS = ":|!";
你有什么想法,這些#define
s為一個好的做法呢? 您是否需要處理2015年的驚嘆號重新定義?
可以安全地假設驚嘆號將由'!'
表示'!'
現在和永遠。 就像常數也將在明天以1
表示一樣。
您不需要定義EXCLAMATION_MARK,也不需要定義ONE或MINUS或INT。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.