2014-05-16 51 views
0

我有一個簡單的程序,它將IP地址作爲唯一參數。 IP地址可以採用兩種格式:點分十進制或十六進制。根據使用哪個,我需要執行不同的操作。檢查argv [1]是否爲十六進制字符串

因此,我需要檢查,如果該參數是

1) IP in dotted decimal format 
2) IP in hex format 
3) other (illegal/malformed argument) 

如何將我最好的檢查? 我應該使用某種正則表達式嗎?正確形成的十六進制地址必須有8個十六進制字符,[0-9a-f]{8}。正確的小數點IP必須包含4個數字[0-255]和3個點。

+1

假設輸入'11.11.11.11'。它會有效嗎?它會是十六進制還是十進制? –

+0

我認爲OP正在尋找這兩個輸入:'(\ d {1,3} \。){3} \ d {1,3}'和'[a-zA-Z0-9] {8}' –

+0

@Mahonri Moriancumer - 一個十六進制IP地址不包含點。因此'11.11.11.11'是一個有效的點分十進制IP。 –

回答

1

您可以使用<ctype.h>中的isxdigit(character),它檢查character是否爲十六進制數字。


UPDATE: 如果我的假設是正確的,「點」的地址是這樣的:(\d{1,3}\.){3}\d{1,3}和十六進制的地址是:[a-zA-Z0-9]{8},那麼你正在尋找的東西是這樣的:

#include <string.h> 
#include <stdbool.h> 

bool 
isxip(const char *address) 
{ 
    for (int i=0; i<strlen(address); i++) 
     if (address[i] == '.') 
      return false; 
    return true; 
} 
-1

當它包含點時,它很可能不是十六進制字符串。

+0

好的,但它可能包含點並仍然是非法的,例如'a.a.a.a' –

+0

是的。而當它僅包含點和點時,它可能是非法的。例如1.2.3.456 –

相關問題