簡體   English   中英

C ++中的類型轉換,整數和字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM