SDUST練習題 IP位址

2021-07-02 03:45:08 字數 1502 閱讀 4177

ip是英文internet protocol的縮寫,意思是「網路之間互連的協議」,也就是為計算機網路相互連線進行通訊而設計的協議。在網際網路中,它是能使連線到網上的所有計算機網路實現相互通訊的一套規則,規定了計算機在網際網路上進行通訊時應當遵守的規則。任何廠家生產的計算機系統,只要遵守ip協議就可以與網際網路互連互通。正是因為有了ip協議,網際網路才得以迅速發展成為世界上最大的、開放的計算機通訊網路。因此,ip協議也可以叫做「網際網路協議」。

網際網路協議位址(英語:internet protocol address,又譯為網際協議位址),縮寫為ip位址(ip address),在internet上,一種給主機編址的方式。常見的ip位址,分為ipv4與ipv6兩大類。

ip位址被用來給internet上的電腦乙個編號。大家日常見到的情況是每台聯網的pc上都需要有ip位址,才能正常通訊。我們可以把「個人電腦」比作「一台**」,那麼「ip位址」就相當於「**號碼」,而internet中的路由器,就相當於電信局的「程式控制式交換機」。

ip位址是乙個32位的二進位制數,通常被分割為4個「8位二進位制數」(也就是4個位元組)。ip位址通常用「點分十進位制」表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進位制整數。例:點分十進ip位址(100.4.5.6),實際上是32位二進位制數(01100100.00000100.00000101.00000110)。

現在,根據以下規則,編寫程式來判斷乙個字串是否是「點分十進位制」表示的ip位址。

讀入一串字串,判斷該字串是否為合法的ip位址。

1 ip位址由四個整數跟三個'.'組成,就是「a.b.c.d」的形式。

2 a,b,c,d四個部分的數字位數都可以是1~3位,其整數值都在0~255之間。

3 不能有除了數字和'.'之外的字元出現。

此題的解法有很多,比較直觀的一種是利用sscanf函式,先用gets將整個串讀入,再用sscanf以%d.%d.%d.%d的形式讀入四個整數,如果讀入成功再對四個整數進行判斷,當判斷完成後該ip位址就是正確的。

但是這種方法有乙個缺陷,如果最後一位數後還有資料,那麼這種做法就明顯的錯了。解決方法是在最後再加一位%c,讀入的時候檢測這一位是否有資料讀入,如果有,則該ip不合法。

另外乙個比較拿人的地方,是資料中如果出現前導「0」,那麼該組資料是不合法的,如「192.168.0.01」是不合法的資料。這種判斷我用了一種比較麻煩的方法,先把讀到的整數以「%d.%d.%d.%d」的格式sprintf到乙個臨時的串中,再比對原串和臨時串的長度。如果不同,說明存在前導0,該組資料是不合法的。

#include#include#includeusing namespace std;

bool isipv4str(const char *str,int leng)

int main()

{ int t;

int len;

char ip[100];

while(cin>>ip)

{len=strlen(ip);

if(isipv4str(ip,len))

cout<<"yes"<

python書中練習題 python練習題

1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...

python的練習題 Python練習題

1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...

NKOJ 7 7練習題A IP位址

問題描述 可以用乙個網路位址和乙個子網掩碼描述乙個子網 即連續的 ip 位址範圍 其中子網掩碼包含 32 個二進位制位,前 32 n 位為 1,後 n 位為 0,網路位址的前 32 n 位任意,後 n 位為 0 0 n 32 所有前 32 n 位和網路位址相同的 ip 都屬於此網路。例如,網位址為 ...